我想创建一个表单代码=<最小重量>-<最大重量>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
由于code
100%由其他字段的值决定,因此无需将其作为单独的字段存储在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))
)
]