在 Django 模型中,我的目标是确保当我从一个类创建对象时,会在另一个类中创建相应的对象。此外,某些字段应该自动继承。这是一个例子:
`class Model1(models.Model):
Malfunction = models.CharField(max_length=255, null=True)
def __str__(self):
return self.Malfunction
class Model2(models.Model):
sit_id = models.AutoField(primary_key=True)
given_Malfunctions = models.ManyToManyField(Model1, blank=True)
dynamik_2 = models.CharField(max_length=255, default=None, blank=True)
def __str__(self):
return f"[{self.sit_id:02d}]"
class Model3(models.Model):
connection_to_model2 = models.ForeignKey(Model2, on_delete=models.CASCADE, default=None)
dynamik_3 = models.CharField(max_length=255, default=None, blank=True)
`
每次创建 Model2 对象时都应该创建 Model3 对象。 dynamik_2 中的字段应自动更新为 dynamik_3。
我应该定义模型3中的信号或函数吗?我遇到了“post_save”的问题,因为我无法在相关对象之间建立连接。
您可以覆盖
Model2
和 Model3
的保存方法。
每次创建 Model2 对象时都应该创建 Model3 对象
class Model2(models.Model):
sit_id = models.AutoField(primary_key=True)
given_Malfunctions = models.ManyToManyField(Model1, blank=True)
dynamik_2 = models.CharField(max_length=255, default=None, blank=True)
def __str__(self):
return f"[{self.sit_id:02d}]"
def save(self, *args, **kwargs):
if self._state.adding: # This is true if there is a NEW object being created, not an existing one being updated
super().save(*args, **kwargs) # Save the object to the database
new_model3 = Model3.objects.create(connection_to_model2=self) # Self contains the current object
dynamik_2 中的字段应自动更新到 dynamik_3
我假设您的意思是当
dynamik_3
更新时,dynamik_2
应该反映相同的值?恕我直言,直接从 model3
获取值看起来更容易,而不是跟踪将包含相同值的两个字段。无论如何,如果你仍然想继续,你可以这样做:
class Model3(models.Model):
connection_to_model2 = models.ForeignKey(Model2, on_delete=models.CASCADE, default=None)
dynamik_3 = models.CharField(max_length=255, default=None, blank=True)
def save(self, *args, **kwargs):
if self.connection_to_model2: # If there is a connection
self.connection_to_model2.dynamik_2 = self.dynamik_3
self.connection_to_model2.save()
super().save(*args, **kwargs)