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
因为它不同于将它们设置为可以为空。
调用超级构造函数将字段保存为空。
一旦项目实例存在,则将字段更改为其自身。
然后再次调用超级构造函数以检测更改并保存模型。