如何重新加载 Django 模型表单?

How do I reload Django model-forms?

目前我的模型看起来与此类似,

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