动态修改modelform Meta

需求:模型对象某些字段是自己生成而非前台传过来,因此新建的时候modelform需要验证这些字段必填,但是编辑的时候不需要

本来想直接修改Meta中exclude,像这样:

class AuthorForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(AuthorForm, self).__init__(*args, **kwargs)
        if kwargs.get('instance'):
            if not hasattr(self.__class__.Meta, 'exclude'):
                self.__class__.Meta.exclude = []
            self.__class__.Meta.exclude.append('name')

 但是并不生效,应该是创建类的时候使用元类将exclude中的字段在fields中排除了,最后使用如下方法

def add_exclude_field(*ex_field):
    def outer(class_obj):
        def __init__(self, *args, **kwargs):
            super(class_obj, self).__init__(*args, **kwargs)
            if kwargs.get('instance'):
                for field in ex_field:
                    del self.fields[field]
        class_obj.__init__ = __init__
        return class_obj
    return outer


@add_exclude_field('name')
class AuthorForm(forms.ModelForm):
    ......

  

转载于:https://www.cnblogs.com/songbird/p/8109729.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值