我是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' ]
我知道我们可以使用上面的注释行更改字段类型。但这并没有带来模型方面的选择。...
请提供建议。
答案 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' ]