【问题标题】:Set values for CharField in django admin model在 django 管理模型中设置 CharField 的值
【发布时间】:2014-05-14 21:11:00
【问题描述】:

我在 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(True/false) 和要求的值,并将其显示为流场中的字符串,一旦用户输入这三个字段,就应该动态完成。

我尝试使用模型属性和覆盖保存方法如下,但没有一个按预期工作。

@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中是否可以根据其他输入显示流场值??

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    你不能有一个属性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')
        ...
    

    【讨论】:

      【解决方案2】:

      如果必须动态计算流量,则无需将“流量”保存到数据库中,删除流场定义并保留属性定义即可。您还应该摆脱您的保存方法覆盖。

      还从您的属性中返回一个您可能应该使用的字符串

      return "%s-%s-%s" % (self.chemicals, self.high_temp, self.other_requirements)
      

      这将产生更少的意外结果。

      如果您想在管理表单中显示流属性,请将其添加到您的字段集定义以及您的 readonly_fields 定义中。

      【讨论】:

      • 它抛出字段错误异常类型“为流程指定的未知字段(流)”
      猜你喜欢
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 2017-08-17
      • 2021-06-11
      • 2011-03-06
      • 2018-12-08
      • 1970-01-01
      • 2016-08-10
      相关资源
      最近更新 更多