【问题标题】:Override Django Forms's Meta Classes覆盖 Django 表单的元类
【发布时间】:2020-12-06 04:11:45
【问题描述】:

ContactForm 是我的应用程序中多次使用的常见形式。我已经在Guardian 表中有ContactForeign Key 模型。所以解决方案中的accepted answer 对我有用。

但是当我必须重用时,为 ContactForm 以下字段再次编写整个表单有点复杂。因此将ContactForm 分开以使其可重复使用。

但有时ContactForm 中的可选字段仍然很少,因此无法再次重复使用相同的ContactForm

class ContactForm(forms.ModelForm): 
    class Meta:
        model = Contact
        fields = ("address", "city", "district", "state", "country", 
                 "pincode", "phone1", "phone2", "is_emergency")

例如。从上面的ContactForm,我只想在GuardianForm 中使用phone1phone2is_emergency 标志。 有没有办法通过将ContactForm 继承到GuardianForm 来覆盖Meta 类,例如:

class GuardianForm(forms.ModelForm, ContactForm): #obviously this will not work
  first_name = forms.CharField(max_length=30, required=False, label = "First Name")
  last_name = forms.CharField(max_length=30, required=False, label = "Last Name")
  # Other Fields ...

  class Meta:
    model = Guardian
    fields = ('passport_number', 'pan_number', 'annual_income',
        'phone1', 'phone2', 'is_emergency',)  # Only 3 Fields of `ContactForm`

或者 - 有没有更好的标准方法来解决这个问题?

【问题讨论】:

标签: python python-3.x django metaclass django-3.0


【解决方案1】:

我不确定您要达到什么目的,但这里是您可以扩展 Django Forms 的元类的方法:

class GuardianForm(ContactForm): 
    class Meta(ContactForm.Meta):
        fields = ("phone1", "phone2", "is_emergency")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 2017-07-16
    • 2012-04-19
    相关资源
    最近更新 更多