【发布时间】:2019-05-14 05:19:55
【问题描述】:
我是 Python 的新手(而且总体上对编程非常缺乏经验),但我有一个问题,我一辈子都无法解决。
我正在尝试使用数据库中另一个模型/类的实例名称预填充数据库中的字段。具有我要预填充的字段的模型是我试图从中获取名称的模型实例的“实例”,并且具有该实例的外键。
目标:1) 用户通过将外键分配给父对象来选择对象的父对象 2) 一个函数获取与用户选择的外键匹配的父实例的名称。 3) 该函数的结果用作该字段的默认值。
代码如下:
class Injury(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text='Unique ID for this particular injury')
name = models.CharField(max_length=200, help_text='Enter an injury or complication (e.g. respiratory failure)')
description = models.TextField(max_length=1000, blank=True, help_text='Describe the injury')
time_to_onset = models.PositiveIntegerField(blank=True, validators=[MaxValueValidator(10000)], help_text='Enter expected time from trigger until injury/complication onset')
findings = models.TextField(max_length=1000, blank=True, help_text='Enter the signs and symptoms of the injury or complication')
vitals_trends = models.TextField(max_length=1000, blank=True, help_text='Enter the vitals changes due to the injury')
class Meta:
ordering = ['name']
def __str__ (self):
return self.name
def get_absolute_url(self):
return reverse('Injury-detail', args=[str(self.id)])
class Injury_Instance(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text='Unique ID for this particular injury')
parent_case = models.ForeignKey(PFC_Case, on_delete=models.SET_NULL,null=True)
injury_model = models.ForeignKey(Injury, on_delete=models.SET_NULL, null=True)
def set_injury_name(self):
for injuries in Injury.all()
if injury_model == injuries
break
return Injury.name
name = dislay_models.CharField(default=set_injury_name(self,Injury,injury_model), max_length=100)
triggered_by = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True)
def __str__ (self):
return self.name
def get_absolute_url(self):
return f'{self.id} ({self.Injury.name})'
问题区域是def set_injury_name和Injury_Instance.name
谢谢!!!
编辑:
我尝试了以下代码,但收到错误“NameError: name 'self' is not defined”
class Injury_Instance(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text='Unique ID for this particular injury')
parent_case = models.ForeignKey(PFC_Case, on_delete=models.SET_NULL,null=True)
injury_model = models.ForeignKey(Injury, on_delete=models.SET_NULL, null=True)
def get_injury_name(self):
return self.name
injury_name=get_injury_name(self)
name = models.CharField(default=injury_name, max_length=100)
triggered_by = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True)
def __str__ (self):
return self.name
def get_absolute_url(self):
return f'{self.id} ({self.Injury.name})'
【问题讨论】:
-
您是否尝试过创建一个仅包含交换数据的函数/类的简化模型来验证您的计划?什么不完全有效?
-
我还没有,但它总是卡在 Injuries.all() 上,说它是未定义的。我基本上尝试了我能想到的每一个变化。我不知道如何正确引用模型。