Py学习  »  M.javid UroÅ¡ Trstenjak  »  全部回复
回复总数  1
6 年前
回复了 M.javid UroÅ¡ Trstenjak 创建的主题 » 在Django 2.1中创建模型后,将字段更新为主键值
class Project(models.Model):
    project_root_parent = models.ForeignKey('self',on_delete=models.CASCADE, related_name='root_parent',null=True, blank=True)
    project_parent = models.ForeignKey('self', on_delete=models.CASCADE, related_name = 'parent',null=True, blank=True)

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)
        if self.project_root_parent is None:
            self.project_root_parent = self
        if self.project_parent is None:
            self.project_parent = self
        super().save(*args, **kwargs)

诀窍是确保 blank=True 当创建 CharFields 因为它不同于将它们设置为可以为空。

调用超级构造函数将字段保存为空。 一旦项目实例存在,则将字段更改为其自身。 然后再次调用超级构造函数以检测更改并保存模型。