【问题标题】:Custom label on ModelChoiceField form fieldModelChoiceField 表单字段上的自定义标签
【发布时间】:2018-07-02 17:14:14
【问题描述】:

我正在使用以下表格:

class InvoiceModelForm ( forms.ModelForm ):

    u = forms.ModelChoiceField ( queryset = User.objects.all () )

但在表单字段中显示的是用户名。我想将其更改为使用名字和姓氏。

我不想改变

def __str__(self):
    return self.username

如何更改表单字段中显示的值?

【问题讨论】:

    标签: django forms


    【解决方案1】:

    https://docs.djangoproject.com/en/stable/ref/forms/fields/#modelchoicefield的最后部分

    将调用模型的 str() 方法来生成对象的字符串表示形式,以用于字段的选择。要提供自定义表示,请继承 ModelChoiceField 并覆盖 label_from_instance。

    所以,在你的情况下,你可以这样做:

    from django.forms import ModelChoiceField
    
    class NameChoiceField(ModelChoiceField):
    
        def label_from_instance(self, obj):
            return f'{obj.first_name} {obj.last_name}'
    

    然后,

    class InvoiceModelForm(forms.ModelForm):
    
       u = NameChoiceField(queryset=User.objects.all())
    

    【讨论】:

    • 太棒了,Django 从未停止让我惊讶!干杯。
    • 太棒了...喜欢它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    相关资源
    最近更新 更多