我正在尝试显示以下模型中的版本字段,而不是默认的str(即field2_name):
注意:这个SO链接Displaying a specific field in a django form可能比我需要的多,但我不是100%肯定。我试图实现这个,但不成功。
还要注意,我在https://docs.djangoproject.com/en/1.10/ref/forms/fields/上尝试了这个示例,但是无法使其工作
型号(通用名):
class CodeVersion(models.Model):
field1= models.ForeignKey(SomeOtherModel, on_delete=models.CASCADE)
field2_name = models.CharField(max_length=256)
field3_description = models.CharField(max_length=1000, blank=True)
version = models.PositiveIntegerField()
def __str__(self):
return self.field2_name
表格:
class VersionsForm(forms.Form):
code_versions = forms.ModelChoiceField(queryset=CodeVersion.objects.none())
def __init__(self, SomeOtherModel_id):
super(VersionsForm, self).__init__()
self.fields['infocode_versions'].queryset = CodeVersion.objects.filter(SomeOtherModel_id=SomeOtherModel_id)
这是可行的-它返回预期的field2_name。
如何返回版本-最简单的方法是什么?
如有任何帮助或指导,我们将不胜感激。
3条答案
按热度按时间fslejnso1#
来自
ModelChoiceField
文档:将调用模型的
__str__
(Python 2上的__unicode__
)方法来生成对象的字符串表示,以用于字段的选择;要提供自定义表示,请子类化ModelChoiceField
并重写label_from_instance
。此方法将接收一个模型对象,并应返回一个适合表示该对象的字符串。例如:s6fujrry2#
如果我没猜错你的问题你可以改变对象字符串的表示形式
然后,您可以继承ModelChoiceField并覆盖label_from_instance方法
或者猴子也可以这样修补
iqjalb3h3#
在一行中:
完整示例