繁体   English   中英

Django在ModelForm小部件中替换选项值

[英]Django Replace choices value in ModelForm Widget

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

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() )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM