Django:将charfield默认设置为由ForeignKeys

时间:2018-02-27 15:56:10

标签: python django django-models

我需要在Django模型中为CharField设置一个默认值,作为模型本身中包含的两个ForeignKeys的组合。

以下是问题中的模型和我尝试的方法:

class SensorParameter(models.Model):
    sensor                  = models.ForeignKey(Sensor)
    parameter               = models.ForeignKey(Parameter)
    parameter_name_userdef  = models.CharField(max_length=100, blank=False, default=default_name)
    live_value              = models.FloatField()

    @staticmethod
    def default_name():
        return str(self.sensor.name) + " - " + str(parameter.parameter_name)

    def __str__(self):
        return str(self.sensor.name) + ' - ' + str(self.parameter)

    def __key(self):
        return self.sensor.id, self.parameter.id

    def __eq__(self, y):
        return isinstance(y, self.__class__) and self.__key() == y.__key()

    def __hash__(self):
        return hash(self.__key())

    class Meta:
        unique_together=(('sensor','parameter_name_userdef'),)

说明:

这是属于传感器的所有参数的表格。 参数实例的名称由传感器实例在另一个表中生成,并且这两者的组合显示在此表中。然后,用户可以选择仅通过此表更改传感器参数的名称。

默认情况下,这个想法是parameter_name_userdef(已定义)将是传感器名称 +“ - ”参数名称的字符串。但是通过表单和AJAX,用户可以将其更改为他们想要的任何字符串。

我尝试了以下(假设设置了“max_length = 100,blank = False”):

parameter_name_userdef  = models.CharField(default=str(sensor.name) + " - " str(parameter.parameter_name)
  

AttributeError:'ForeignKey'对象没有属性'parameter_name'(确实如此!)

parameter_name_userdef  = models.CharField(default=str(sensor + parameter))
  

TypeError:+的不支持的操作数类型; 'ForeignKey'和'ForeignKey'

parameter_name_userdef  = models.CharField(default=str(sensor.name, parameter.parameter_name)
  

AttributeError:'ForeignKey'对象没有属性'parameter_name'

default_sensor = str(sensor.name)
default_param = str(parameter.parameter_name)
default_string = default_sensor + " - " + default_param
parameter_name_userdef  = models.CharField(default=default_string)
  

AttributeError:'ForeignKey'对象没有属性'parameter_name'

parameter_name_userdef  = models.CharField(max_length=100, blank=False, default=default_name)
live_value = models.CharField(max_length=50)

    @staticmethod
    def default_name():
        return str(self.sensor.name) + " - " + str(parameter.parameter_name)
  

NameError:未定义名称'default_name'

如果我尝试:

parameter_name_userdef  = models.CharField(default=str(sensor, parameter)

这有效,但它不是我需要的,因为传感器参数的自我 str 不同Sensor.name Parameter.parameter_name 。 (传感器.__ str __ 包含序列号,参数.__ str __ 包含“运行”值)

(另外,我意识到Sensor.name和Parameter.parameter_name之间的命名差异,我很快就会改变它,但它们会在几十个地方使用,所以它可能需要一段时间)

有关从其他2个模型中设置默认名称的任何帮助吗?

0 个答案:

没有答案