在django admin模型中设置CharField的值

时间:2014-04-03 07:38:54

标签: django django-models

我在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 ??

中的其他输入显示流场值

2 个答案:

答案 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定义中。

相关问题