Django:在模型和表单中设置CHOICES有什么区别?

时间:2016-11-10 06:09:55

标签: django django-models django-forms

我认为,如果我100%确定使用ChoiceField,那么仅在forms中定义form是最佳解决方案,对吗?

我的意思是,我不必这样做:

models.py

class Payment(TimeStampedModel):
    PAY_METHOD_CHOICES = (
        ('card', '카드'),
        ('cash', '무통장입금'),
    )
    pay_method = models.CharField(
        max_length=10,
        choices=PAY_METHOD_CHOICES
    )

forms.py

class PaymentForm(forms.ModelForm):
    PAY_METHOD_CHOICES = (
        ('card', '카드'),
        ('cash', '무통장입금'),
    )
    pay_method = forms.ChoiceField(
        choices=PAY_METHOD_CHOICES
    )
    class Meta:
        model = Payment

这是冗余代码,不是吗?

从这个意义上讲,我无法理解为什么在choices字段中使用models ...

什么时候使用?哪种情况?

由于

1 个答案:

答案 0 :(得分:0)

与文件状态https://docs.djangoproject.com/en/1.10/ref/models/fields/#choices

一样
  

如果给出了这个,默认表单小部件将是一个带有这些选项的选择框,而不是标准文本字段。

所以基本上choices param用于在你做

时自动构造表单
class PaymentForm(forms.ModelForm):
    class Meta:
        model = Payment
        fields = '__all__'

它将根据您的模型设置表单字段。