我想在django中创建约束



我想创建一个表单代码=<最小重量>-<最大重量>lt;weight_unit>

我该怎么做我刚学会

class Size(models.Model):
code = models.CharField(max_length=200, primary_key=True)
uni = [("GC", "Gram/Con"), ("KC", "Kg/Con")]
min_weight = models.IntegerField(blank=False, null=False)
max_weight = models.IntegerField(blank=False, null=False)
weight_uni = models.CharField(max_length=10, choices=uni, default="KC")
def __str__(self):
return self.code

由于code100%由其他字段的值决定,因此无需将其作为单独的字段存储在db中。相反,让它成为一种财产,就像这样:

class Size(models.Model):
uni = [("GC", "Gram/Con"), ("KC", "Kg/Con")]
min_weight = models.IntegerField(blank=False, null=False)
max_weight = models.IntegerField(blank=False, null=False)
weight_uni = models.CharField(max_length=10, choices=uni, default="KC")
@property
def code(self):
return '%s - %s %s' % (self.min_weight, self.max_weight, self.weight_uni)
def __str__(self):
return self.code

您可以覆盖save((方法并配置以下内容:

def save(self, *args, **kwargs):
self.code = self.min_weight - self.max_weight*self.weight_unit
return super(Size, self).save(*args, **kwargs)

这样,每次调用save(当值改变时调用它(时;代码";字段,并在必要时进行更新。

这里有一个如何使用约束的例子,但我不认为你能达到同样的结果:

class Meta:
constraints = [
models.CheckConstraint(
name='SimpleConstaint',
check=(models.Q(sold_units__gte=0)&models.Q(sold_units__lte=100))
)
]

最新更新