Django 替换 ModelForm Widget 中的选择值

2024-01-07

我有一个模型,可以让我在一些预定义值之间进行选择。

in models.py

class Customer(models.Model):
    GENDER = ( ('m' , 'Male') , ('f' , 'Female') )
    PersonGender = models.CharField(max_length=20,choices=GENDER) 

我有一个 ModelForm 来处理我的表单,没关系,但由于某些原因我想定义另一个 ModelForm 来更改“GENDER”值。

我在 forms.py 中定义了另一个 ModelForm

GENDER = (('male' , 'Male' ), ('female' , 'Female') )
class MySecondaryForm(forms.ModelForm):
        class Meta:
            model = Customer
            fields = '__all__'
            widgets = {
                'PersonGender': forms.Select(choices=GENDER)
            }

使用此配置下拉菜单不会更改为新值。

我可以使用以下配置修复它:

GENDER = (('male' , 'Male' ), ('female' , 'Female') )
class MySecondaryForm(forms.ModelForm):
    PersonGender = forms.ChoiceField(choices=GENDER)
    class Meta:
        model = Customer
        fields = '__all__'

使用上述配置下拉值更改为我的新值,但我想知道如何在“小部件”的元类内更改它?


您不应在 forms.py 和 model.py 中定义 GENDER。只需在 models.py 中定义它即可。

class MySecondaryForm(forms.ModelForm):
    class Meta:
        model = Customer

对于你的表格来说就足够了。在 python 中你能做的最糟糕的事情就是使用你不需要的东西。

关于您的评论,也许这将是一个如下所述的选项:

http://www.ilian.io/django-forms-choicefield-with-dynamic-values/

引用这篇文章的代码

def get_my_choices():
    # you place some logic here
    return choices_list

class MyForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['my_choice_field'] = forms.ChoiceField(
            choices=get_my_choices() )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 替换 ModelForm Widget 中的选择值 的相关文章

随机推荐