在Django中使用ModelChoiceField时,ModelForm始终返回false

时间:2015-11-12 07:11:05

标签: django django-forms

Models.py

class SysMcc(models.Model):
mcc_type = models.CharField(max_length=100)
mcc_stype = models.CharField(max_length=100)
mcc_code = models.CharField(max_length=4)

Form.py

class MccTypeForm(ModelForm):
mcc_type = forms.ModelChoiceField(queryset=SysMcc.objects.values_list('mcc_type', flat=True),initial=0, )

class Meta:
    model = SysMcc
    fields = ('mcc_type',)

View.py

if request.method == 'POST':
        form_mcc = MccTypeForm(request.POST)
        if form_mcc.is_valid():

           ...

第一个问题

当我使用此模板在模板中显示 mcc_type 时:

 mcc_type = forms.ModelChoiceField(queryset=SysMcc.objects.values_list('mcc_type', flat=True),initial=0, )

模板看起来像

<option value="apple">apple</option>
<option value="google">google</option>

哪个值也是 mcc_type ,现在我想将值设置为 mcc_code ,如下所示:

<option value="1">apple</option>
<option value="2">google</option>

第二个问题

如果form_mcc.is_valid()总是返回false,那么我就无法继续

2 个答案:

答案 0 :(得分:0)

queryset=SysMcc.objects.values_list('mcc_type', flat=True)

这不是一个查询集,如果你只想获取mcc_type和id,那么你必须这样做;

queryset=SysMcc.objects.only('id', 'mcc_type')

答案 1 :(得分:0)

选择

中的显示值

覆盖模型中的__str__

class SysMcc(models.Model):
   mcc_type = models.CharField(max_length=100)
   mcc_stype = models.CharField(max_length=100)
   mcc_code = models.CharField(max_length=4)

   def __str__(self):
       return self.mcc_type

并使用Geo Jacob所描述的查询集:

queryset=SysMcc.objects.only('id', 'mcc_type')

或只是简单:queryset=SysMcc.objects

表格有效

要知道is_valid()返回False的原因,最好只打印出表单和每个表单字段的所有错误。这个问题很可能不是你想象的那样。相反,可能有一个你不想包含的字段,但Django认为是必需的,应该设置。查看您的模型,所有字段都是必需的。