Python django模型每个字段的自定义验证

Python django模型每个字段的自定义验证,python,django,django-models,Python,Django,Django Models,我有一个这样的模型: TYPES = (('hi', 'hi'), ('hello', 'hello')) class Test(models.Model): name = models.CharField(max_length=255) phonenumber = models.CharField(max_length=255) # hi address = models.CharField(max_length=255) # hello kind = mode

我有一个这样的模型:

TYPES = (('hi', 'hi'), ('hello', 'hello'))
class Test(models.Model):
    name = models.CharField(max_length=255)
    phonenumber = models.CharField(max_length=255) # hi
    address = models.CharField(max_length=255) # hello
    kind = models.CharField(max_length=5, choices=TYPES)
正如您现在看到的,每个字段都是必需的。我希望实现以下目标:


如果种类='hi':使地址非强制性,如果种类='hello'使电话号码非强制性。如何覆盖此的模型验证?是否可以通过getattr和setattr实现这种功能?

您只需覆盖保存即可

class Test(modesl.Model):
    ## .....
    def save(self, *args, **kwargs):
        # ....
        if kind == 'hi':
             self.adress = "what you want"
        #.....
        super(Test, self).save(*args, **kwargs)

另外:如果只能选择一种类型,为什么要使用两个不同的文本字段?@Brunodesshuilliers:那么我应该为每个属性编写验证?我对这个模型有10多个属性。不同的文本字段只是一个例子。@Brunodesshuilliers:我不能执行类似以下操作:def cleanself:if self.kind='hi:self.address.\u_property\u_.blank=True'