2014-08-31 2 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

개체 관계가 잘못되었습니다. 개인이 많은 항목을 소유 할 수 있지만 각 항목은 한 사람이 소유 할 수있는 경우 item에서 person까지의 다 대일 관계입니다. (ForeignField 아님) 필드가 Item 인 경우, 예 :

class Item(models.Model): 
    item_name = models.CharField(max_length=50) 
    item_description = models.TextField() 
    owner = Models.ForeignKey(Person) 

당신은 다음 Person 인스턴스에 주어진 Item 인스턴스에 대한 owner을 설정하거나 Person 인스턴스에서 item_set 외래 키 관리자와 작업 할 수 있습니다

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)으로 전화하십시오.

관련 문제