如何使用ModelChoiceField显示模型的“名称”字段

时间:2019-12-25 09:57:26

标签: python django django-forms

我有以下型号

class MyObject(models.Model):
    name = models.CharField(max_length=200, unique=True)
    type = models.CharField(max_length=20, choices=(('Type 1', 'Type 1','Type 2','Type 2')), null=False)

我想让用户选择MyObject的实例,所以我创建了一个表单:

class ClassifierSelectMultiForm(forms.Form):
    def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
        myObjects = MyObject.objects.all()
        self.fields["pick_model"] = ModelChoiceFieldCustom(myObjects)

选择实例时,我希望用户能够看到“名称”字段,所以我已经覆盖了label_from_instance方法。

class ModelChoiceFieldCustom(ModelChoiceField):
    def label_from_instance(self, obj):
        return obj.name

输出(意外): Create a function triggered by Azure Blob storage

我尝试将label_from_instance更改为返回obj.type而不是obj.name

输出(预期):

django-simple-history

如何在表单中显示名称属性?

1 个答案:

答案 0 :(得分:3)

您应该改用模型的__str__方法(表单或字段定义不是这样做的好地方):

class MyObject(models.Model):

    name = models.CharField(max_length=200, unique=True)
    type = models.CharField(max_length=20, choices=(('Type 1', 'Type 1','Type 2','Type 2')), null=False)

    def __str__(self):
        return self.name

这样,通过调用MyObject模型的实例,默认情况下它将显示模型的name属性。