2014-08-31 91 views
0

這裏是我的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同時擁有item1item2,但我不知道如何以存儲它們:

person = Person(person_name="John Smith", owned_items= ???????) 

回答

3

您的對象關係是錯誤的。如果一個人可以擁有多件物品,但每件物品只能由一個人擁有,那麼這是itemperson之間的多對一關係,應由Item上的(而非ForeignField)字段表示,例如:

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記錄,這是多對多的關係,應該用ManyToManyField表示。這樣的場可以在任一模式被宣佈 - 在這種情況下,它可能會更方便地宣佈它Person

class Person(models.Model): 
    person_name = models.CharField(max_length=50) 
    owned_items = models.ManyToManyField("Item") 

該文檔顯示如何使用多到許多領域的工作 - 你通常要麼創建或查找Item實例,比致電someperson.owned_items.add(some_item)

相關問題