以下是我的model.py的样子:
class Person(models.Model):
person_name = models.CharField(max_length=50)
owned_items = models.ForeignField("Item")
class Item(models.Model):
item_name = models.CharField(max_length=50)
item_description = models.TextField()
这是我想要存储的数据
item1 = Item(item_name="keyboard", item_description="computer keyboard)
item2 = Item(item_name="monitor", item_description="used to visualize data")
我的person
拥有item1
和item2
,但我不确定如何存储它们:
person = Person(person_name="John Smith", owned_items= ???????)
答案 0 :(得分:3)
您的对象关系错误。如果一个人可以拥有多个项目,但每个项目只能由一个人拥有,那么这是item
到person
之间的多对一关系,应由{{3}表示ForeignField
上的{not Item
)字段,例如:
class Item(models.Model):
item_name = models.CharField(max_length=50)
item_description = models.TextField()
owner = Models.ForeignKey(Person)
然后,您可以将给定owner
实例的Item
设置为Person
实例,或者使用item_set
外部密钥管理器Person
实例:
newperson = Person(person_name="John Smith")
newperson.save()
newmonitor = Item(item_name="monitor", item_description="used to visualize data", owner=newperson)
newmonitor.save()
# if owner is a nullable field:
newkeyboard = Item(item_name="keyboard", item_description="computer keyboard")
newkeyboard.save()
newperson.item_set.add(newkeyboard)
newperson.save()
如果每个项目可以由多个人拥有,比如因为您对所有键盘使用单个Item
记录,那么这是一个多对多关系,应该用ForeignKey
来表示。这样的字段可以在任一模型上声明 - 在这种情况下,在Person
上声明它可能更方便:
class Person(models.Model):
person_name = models.CharField(max_length=50)
owned_items = models.ManyToManyField("Item")
文档展示了如何使用多对多字段 - 您通常会创建或查找Item
个实例,而不是调用someperson.owned_items.add(some_item)
。