Django:创建和更新单独的对象

问题描述 投票:0回答:1

在 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”的问题,因为我无法在相关对象之间建立连接。

django django-models django-signals
1个回答
0
投票

您可以覆盖

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)

© www.soinside.com 2019 - 2024. All rights reserved.