Django 如何设置指向自身的外键的默认值?

Django 如何设置指向自身的外键的默认值?,django,django-models,Django,Django Models,models.py class Person(models.Model): (...) leader = models.ForeignKey("self", on_delete=models.RESTRICT, related_name ='leader_set') 当我创建对象时: Person.objects.create() leader的值为NULL,这是错误的 默认情况下,我应该为相同的Person对象设置什么(开始时Person是自己的领导

models.py

class Person(models.Model):
     (...)
     leader = models.ForeignKey("self", on_delete=models.RESTRICT, related_name ='leader_set')
当我创建对象时:

Person.objects.create()
leader的值为NULL,这是错误的

默认情况下,我应该为相同的Person对象设置什么(开始时Person是自己的领导者)

我知道,我可以将null=True添加到新创建的对象中,并在创建集合引线后添加到新创建的对象中,但不知道是否有更好的解决方案

new_person = Person.objects.create()
new_person.leader = new_person
new_person.save()

您必须将
blank=True
添加到该字段中,因为只有在获得ID后才能设置FK字段,并且只有在保存对象后才能获得ID,正如您所看到的,当该字段需要值时,您不能这样做

然后,您可以在
post\u save
方法中指定此值,方法如下:

从django.db.models.signals导入后保存
从django.dispatch导入接收方
班级负责人(models.Model):
leader=models.ForeignKey(
“自我”,
空白=真
在_delete=models.RESTRICT上,
相关的\u name='leader\u set'
)
@接收者(保存后,发送者=人)
def自动创建领导者(实例,**kwargs):
"""
无论何时创建Person对象,如果未设置引线,请将其关联
"""
如果kwargs.get('created',False):
如果不是instance.leader:
instance.leader=实例
保存(更新_字段=['leader',]))