【问题标题】:how to change field type and retain choices defined in model django 3.0如何更改字段类型并保留模型 django 3.0 中定义的选择
【发布时间】:2020-03-17 21:31:46
【问题描述】:

我是 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' ]

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

请告知如何实现它。

【问题讨论】:

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


    【解决方案1】:

    如果您只想更改小部件,最好在 Meta 类中通过将字典传递给 widgets attribute [Django-doc] 来指定:

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

    因此,模型表单的构造保持不变,因此将指定模型中的选项等。是的,您可以手动指定选项,但如果您稍后要更改字段,那么您必须更改表单域也是如此。通过指定小部件,您可以让 Django 自动化其余部分。

    如果你还想定义表单域,你可以从模型中获取选项:

    class MyForm(forms.ModelForm):
        category = forms.ChoiceField(choices=SPA.category.choices, widget=forms.RadioSelect())
    
        class Meta:
            model = SPA
            fields = [ 'name', 'category', 'price' ]

    【讨论】:

      猜你喜欢
      • 2015-01-22
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      • 2019-09-29
      • 1970-01-01
      • 2014-11-11
      • 2017-02-23
      • 1970-01-01
      相关资源
      最近更新 更多