ModelChoiceField:如何显示属性而不是对象?

时间:2013-12-26 11:24:54

标签: python django django-forms

我有两个表(SubjectLanguae),每个表只有一个属性subjectlanguage。在相对表单的字段中,我想看到一个下拉菜单,其中包含属性的值,但是使用以下代码:

lang = forms.ModelChoiceField(queryset=Language.objects.order_by('?'), required=False, label='What language want to search?')
subject = forms.ModelChoiceField(queryset=Subject.objects.order_by('?'), required=False, label='Whitch subject you want to search?')

我看到Subject objectLanguage object的下拉菜单与另一个相同。

如何显示对象的实际值?

1 个答案:

答案 0 :(得分:3)

最简单的解决方案是实施LanguageSubject模型__unicode__方法,使其返回您要显示的属性(或基于任何属性组合构建的任何unicode字符串或随你)。在你的情况下:

 class Subject(models.Model):
     subject = models.CharField(....)

     def __unicode__(self):
         return self.subject

和语言同上

有关更高级的用法,请在此处记录:https://docs.djangoproject.com/en/1.6/ref/forms/fields/#modelchoicefield

请注意,您实际上不必创建ModelChoiceField子类来覆盖label_from_instance - 您还可以使用{对ModelChoiceField 实例进行monkeypatch您的表单lambda

中的{1}}