ModelChoiceField 列出元组而不是简单值

ModelChoiceField lists tuples instead of simple values

我有一个带有 ModelChoiceField 输入的 Django 表单,它将结果列为元组而不是简单值。

我不知道该怎么做。

DJANGO
class PayThis(forms.Form):
   amount = forms.FloatField(required=False)
   cost2  = forms.FloatField(required=False)
   year = forms.ModelChoiceField(required=False,queryset=AnAgricol.objects.values_list('anul').all())

 HTML
 <option value="(2019,)">(2019,)</option>

我希望得到这个:

A ModelChoiceField 交易,顾名思义,涉及模型对象。因此,您不能在此处使用 values_list

您的 Form 因此应该定义如下内容:

class PayThis(forms.Form):
    amount = forms.FloatField(required=False)
    cost2  = forms.FloatField(required=False)
    year = forms.ModelChoiceField(required=False, queryset=<b>AnAgricol.objects.all()</b>)

您可以将 __str__ 覆盖为 return 年份的字符串表示形式,例如:

AnAgricol(models.Model):
    anul = models.IntegerField()

    def <b>__str__</b>(self):
        return str(self.anul)

但是如果年份不能代表 AnAgricol,那么您可以使用 ChoiceField [Django-doc],例如:

class PayThis(forms.Form):
    amount = forms.FloatField(required=False)
    cost2 = forms.FloatField(required=False)
    year = forms.ChoiceField(required=False<b>, choices=[]</b>)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['year']<b>.choices</b> = [
            (yr, yr) for yr
            in AnAgricol.objects.values_list('anul', flat=True).distinct()
        ]