使用自重引用的外键关系创建新记录

Create new record with the self rererenced Foreignkey relation

下面是我的models.py并做了一个自引用外键关系。

class emp_details(models.Model):
    emp_id              =   models.AutoField(primary_key = True) 
    emp_first_name      =   models.CharField(max_length = 50,null = False)
    emp_manager_id      =   models.ForeignKey('self')

a1 = emp_details(emp_first_name = "ramesh",emp_manager_id = 2)
a1.save()

这里我正在尝试创建新记录。但我收到以下错误:

ValueError: Cannot assign "'2'": "emp_details.emp_manager_id" must be a "emp_details" instance.

如何使用自重引用的外键关系创建新记录?

在你的例子中,emp_manager_id是外键字段,所以你应该将id分配给emp_manager_id_id

a1 = emp_details(emp_first_name = "ramesh", emp_manager_id_id=2)

字段名最好改为emp_manager。请注意,建议使用 CamelCase 作为您的型号名称,因此 EmpDetail 优于 emp_details。将它们放在一起,您有:

class EmpDetail(models.Model):
    emp_id = models.AutoField(primary_key = True) 
    emp_first_name = models.CharField(max_length = 50,null = False)
    emp_manager = models.ForeignKey('self')

既然emp_manager是外键,就可以把id赋给emp_manager_id了。

a1 = EmpDetail(emp_first_name="ramesh", emp_manager_id_id=2)

如果要将emp_manager设置为对象本身,则需要先将对象保存到数据库中,使其获得主键。

a1 = EmpDetail(emp_first_name="ramesh")
a1.save()
a1.emp_manager = a1  # You could do 'a1.emp_manager_id = a1.id' instead 
a1.save()

为此,您需要在外键上设置 null=True,这样您就可以在不设置 emp_manager.

的情况下保存对象
emp_manager = models.ForeignKey('self', null=True)