以下是我的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.
如何使用自我重新获取的外键关系创建新记录?
答案 0 :(得分:1)
在您的情况下,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)