как изменить тип поля и сохранить варианты, определенные в модели django 3.0 - PullRequest
1 голос
/ 18 марта 2020

Я новичок в 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 голосов
/ 18 марта 2020

Если вы хотите изменить только виджет, вам лучше указать это в классе Meta, передав словарь атрибуту widgets [Django -doc] :

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

Таким образом, конструкция формы модели останется нетронутой, и, таким образом, будут определены варианты из модели, et c. Да, вы можете указать варианты вручную, но если позже вы, например, измените поле, то вам также придется изменить поле формы. Указав виджет, вы позволяете Django автоматизировать все остальное.

Если вы все еще хотите определить форму, вы можете получить выбор из модели:

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

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