Change Django ModelChoiceField to show users' full names rather than usernames

后端 未结 5 1103
不知归路
不知归路 2020-11-30 01:31

I have a form in my Django app (not in admin) that allows staff members to select a user from a dropdown.

forms.ModelChoiceField(queryset = User.objects.filt         


        
5条回答
  •  悲&欢浪女
    2020-11-30 01:53

    If you want to change choices of the field in model form, try this adaptation of the Bartek's answer:

    model:

    class MyModel(models.Model)
        user = models.ForeignKey(...)
    

    form field:

    class UserModelChoiceField(forms.ModelChoiceField):
        def label_from_instance(self, obj):
            return obj.get_full_name()
    

    form:

    class MyModelForm(forms.ModelForm):
        class Meta:
            model = MyModel
            fields = ['user']
            field_classes = {
                'user': UserModelChoiceField
            }
    

    This approach will preserve params of the field (you don't need to specify queryset, required and so on).

提交回复
热议问题