我需要在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个模型中设置默认名称的任何帮助吗?