如何更改字段类型并保留在django 3.0模型中定义的选择

时间:2020-03-17 21:31:46

标签: django python-3.x django-models django-forms

我是Django的新手,我试图通过保留模型中定义的选择来更改字段类型。

这是我的模特

class MyModel(models.Model):
    class Type(models.IntegerChoices):
        INDIRECT= 0
        DIRECT = 1
        BOTH = 2

    name = models.CharField(max_length=20)
    category = models.IntegerField(choices=Type.choices)
    price= models.IntegerField()

这是我的表单类

class MyForm(forms.ModelForm):
    #category = forms.ChoiceField(widget=forms.RadioSelect())

    class Meta:
        model = SPA
        fields = [ 'name', 'category', 'price' ]

我知道我们可以使用上面的注释行更改字段类型。但这并没有带来模型方面的选择。...

请提供建议。

1 个答案:

答案 0 :(得分:0)

如果您只希望其他小部件,最好在Meta类中通过向widgets attribute [Django-doc]传递字典来指定它:

class MyForm(forms.ModelForm):
    class Meta:
        model = SPA
        fields = [ 'name', 'category', 'price' ]
        widgets = {
            'category': forms.RadioSelect
        }

这样可以完整保留模型表单的构造,从而可以指定模型中的选项,等等。是的,您可以手动指定选项,但是如果以后例如要更改字段,则必须更改表单字段也是如此。通过指定小部件,您可以让Django自动执行其余操作。

如果您仍然想定义fied表单,则可以从模型中获得选择:

class MyForm(forms.ModelForm):
    category = forms.ChoiceField(choices=SPA.category.choices, widget=forms.RadioSelect())

    class Meta:
        model = SPA
        fields = [ 'name', 'category', 'price' ]