Django的;要求依赖于字段集

时间:2013-07-20 13:14:07

标签: python django

我如何向Django模型添加规则,使默认情况下不需要的某些字段,如果设置了另一个字段则需要。或者甚至是相反的方式

假设我有这个型号:

class Item(models.Model):

    name = models.CharField(max_length = 75)
    cant_be_sold = models.BooleanField()
    flat_price = models.IntegerField(blank = True, null = True, default = None, validators = [MinValueValidator(0)])
    defense = models.IntegerField(blank = True, null = True, default = None, validators = [MinValueValidator(0)])
    required_classes = models.ManyToManyField('otherappname.Class', related_name = 'Requires_Classes', blank = True, null = True, default = None)

假设这里可能有两种情况;

  1. 我将cant_be_sold标记为True;现在flat_price只能是NoneNULL
  2. 我填写defense;现在需要选择一个或多个required_classes
  3. 我想知道在Django中这样做的好方法是什么。由于我的系统中的项目差异有很大的扩展,因此我的项目模型有超过70个属性字段,可以帮助我防止错误输入。

1 个答案:

答案 0 :(得分:4)

为您的模型编写clean方法。在其中,您可以更改字段值,并引发验证错误。以下示例可以帮助您入门。

def clean(self):
    if self.cant_be_sold and self.flat_price is not None:
        raise ValidationError("flat_price must be None when cant_be_sold is True")