我有以下型号
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
。
输出(预期):
如何在表单中显示名称属性?
答案 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
属性。