我在django中有以下模型
class Process(models.Model):
chemicals = models.CharField(max_length=20, choices=CHEMICAL)
high_temp = models.BooleanField()
other_requirements = models.CharField(max_length=20, choices=REQ)
flow = models.CharField(max_length=100)
我需要获取化学品的值,high_temp(真/假)和要求,并将其显示为流场中的字符串,一旦用户输入三个字段,就应该动态完成。
我尝试使用模型属性并覆盖保存方法,如下所示,但没有按预期完成。
@property
def flow(self):
return self.chemicals+"-"+self.other_requirements
def save(self, *args, **kwargs):
self.flow = self.chemicals+"-"+self.other_requirements
super(Process, self).save(*args, **kwargs)
是否可以根据django admin ??
中的其他输入显示流场值答案 0 :(得分:0)
您无法拥有属性flow = models.CharField(max_length=100)
和具有相同名称的方法。
您需要删除其中一个。哪一个?如果您已将流量数据存储在其他3个字段中,则将其存储在单独的字段中将是多余的。我认为你应该完全放弃这个领域并使用这个方法。
class Process(models.Model):
chemicals = models.CharField(max_length=20, choices=CHEMICAL)
high_temp = models.BooleanField()
other_requirements = models.CharField(max_length=20, choices=REQ)
def flow(self):
if self.chemicals and self.high_temp and self.other_requirements:
return '{}-{}-{}'.format(self.chemicals, self.high_temp, self.other_requirements)
else:
return None
请注意,我使用字符串.format
方法,这是建议字符串的推荐方法。不要再把它们加在一起了。
编辑:您可以在list_display
上投影该方法,只需将其置于元组中
class ProcessAdmin(ModelAdmin):
...
list_display = ('chemicals', 'high_temp', 'other_requirements', 'flow')
...
答案 1 :(得分:0)
如果必须动态计算流量,则不需要将“流量”保存到数据库,删除流场定义并保留属性定义。您还应该摆脱保存方法覆盖。
还要从您的属性中返回一个字符串,您应该使用
return "%s-%s-%s" % (self.chemicals, self.high_temp, self.other_requirements)
会产生较少的意外结果。
如果要以admin格式显示flow属性,请将其添加到fieldsets定义以及readonly_fields定义中。