使用自重引用的外键关系创建新记录
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)
下面是我的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)