Opened 8 years ago

Last modified 8 years ago

#27976 closed Cleanup/optimization

label_from_instance fails silently: form field disappears. — at Version 1

Reported by: Wim Feijen Owned by: nobody
Component: Forms Version: 1.8
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Wim Feijen)

Hi,

In a forms init method, I am using a foreign-key pulldown. I'd like to rename the labels, like this:

       self.fields['lawyer'].label_from_instance = lambda obj: obj.userprofile.name

However, when obj has no userprofile, the code does not raise an Exception, as expected, but fails silently and the field disappears from the form output. I find this dangerous and would just expect the field to raise an Exception, so I can fix it, instead of causing abnormalities.

Part of my code in more detail is here. I'm using UserProfiles because I find them way easier to understand than extended user models.

class UserProfileForm(forms.ModelForm):
    """General form to add a user. Sanne-only."""
    group = forms.ModelChoiceField(queryset=Group.objects.order_by('name'), required=True, widget=forms.RadioSelect, initial=lawyer_group)
    email = forms.EmailField(required=True, label="Email address")

    def __init__(self, *args, **kwargs):
        super(UserProfileForm, self).__init__(*args, **kwargs)

        lawyer_users = User.objects.filter(groups__name__in=['firm lawyer', 'client lawyer']).distinct().order_by('userprofile__name')
        self.fields['lawyer'].queryset = lawyer_users
        self.fields['lawyer'].label_from_instance = lambda obj: obj.userprofile.name

    class Meta:
        model = UserProfile
        fields = ['group', 'name', 'email', 'vendor', 'customer', 'city', 'country', 'photo', 'tel', 'tel2', 'bar_city', 'bar_date_of_admission', 'lawyer']

The form is outputted as divs using crispy_forms

Change History (1)

comment:1 by Wim Feijen, 8 years ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.
Back to Top