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,那么我就无法继续
答案 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认为是必需的,应该设置。查看您的模型,所有字段都是必需的。