Как перезагрузить модель-форму Django?

В настоящее время мои модели выглядят примерно так,

def feature_tuples():
    features = (('a', 'a'), ('b', 'b'))
    return features

class Sample(models.Model):
choices_tuple = models.CharField(max_length=20, blank=True, null=True, choices=feature_tuples())

Я создал форму модели этой модели. Однако в какой-то момент пользователь может изменить варианты с (a, b) на (c, d) или любые другие параметры. Варианты choices_tuple также должны быть изменены с a, b на c, d. Я не могу найти способ перезагрузить их в форму. Помогите?

Если вы хотите динамически устанавливать варианты выбора для поля модели, то вы можете создать модельную форму для этой модели и установить динамические варианты в методе init модельной формы.

Примечание: Не устанавливайте атрибут choices в модели. Если вы установите choices в поле модели, то она будет принимать только те значения choice_value.

from django import forms


class YourModelForm(forms.ModelForm):
    
    default_choices = [('a', 'a'), ('b', 'b')]

    choices_tuple = forms.ChoiceField(choices=default_choices, required=False)

    def __init__(self, *args, **kwargs):
        super(YourModelForm, self).__init__(*args, **kwargs)
        self.fields['choices_tuple'].choices = self.get_dynamic_choice()
            

    class Meta:
        model = YourModel
        fields = ['choices_tuple']

    def get_dynamic_choice(self):
        ''' you can set choices'''
        choices = [('c', 'c'), ('d', 'd')]
        return choices
Вернуться на верх