2015-05-21 38 views
0

我需要一些概念性幫助理解這個想法是如何工作的。如果我有一個用戶製作一個列表,並且他們可以爲每個列表添加無限項目,我將如何繪製模型?不斷添加新條目的Django模型

在我的名單模型我有user = ForeignKey(User),所以這個列表模型的每個實例歸因於當前登錄的用戶,他們可以有一系列的名單。但是,如果他們想將項目添加到列表中,就我有一個新的模式稱爲add_item,使list_name = foreignkey(user.listname)

#New List Model 
    class NewList(models.Model): 
     user = models.ForeignKey(User) 
     list_name = models.CharField(max_length = 100, default = "Enter List Name") 
     picture = models.ImageField(upload_to='profile_images', blank=True) 

     def __unicode__(self): 
      return self.list_name 

#New Item Model 
    class NewItem(models.Model): 

     lists = models.ForeignKey(NewList) 
     # list_name = models.OneToOneField(User.list_name) 

     def __unicode__(self): 
      return self.user.username 

回答

3

如果我理解正確,

class MyList(models.Model): 
    user = ForeignKey(User) 
    list_name = CharField(...) 
    .... 

    def list_items(self): 
     return self.mylistitems_set.all() 

class MyListItem(models.Model): 
    mylist = ForeignKey(MyList) 
    item_name = ..... 
    .... 

用戶可以創建任意多個列表的他/她想要的,並可以添加任意數量的條目到具體清單。所以邏輯是你創建任意數量的列表(上MYLIST記錄),併爲您完成MyListItem希望將其添加儘可能多的項目。

以下是做到這一點的好辦法:

alist = MyList(......) 
alist.mylistitem_set.create(...) # add an item to alist 

Django Reverse relations documentation is here

更新:舉一個具體的用戶的所有名單

user = User.objects.get() # a specific user 
user.mylist_set.all() # returns all lists belong to that user. 

你要了解更多關於反向django中的關係。

+0

啊,這與我所想要的非常接近,如果不是完全相同的話。外鍵是否基於__unicode__函數填充? – ryan

+0

你是什麼意思?你想達到什麼目的?我在'MyList'下添加了一個方法,允許您檢索與該列表相關的所有'MyListItems'。您可以根據自己的需要改變它或添加類似的方法。 – FallenAngel

+0

我試圖讓用戶只看到與他們的用戶名相關的列表,然後將一個項目添加到給定的列表。我在編輯中添加的代碼僅顯示所有可用列表,添加新列表項時就是這樣。 – ryan

0

聽起來是正確的。如果您的模型如命名爲MyList,則:

my_user = ... # obtain a user object 
my_item = MyList(user=my_user) 
my_item.save() 
+0

好大。只是爲了驗證,我將如何創建一個繼承用戶列表名稱的字段?我說list_name = foreignkey(user.listname),但不知道這是否準確。 – ryan

+0

Tbh,你的問題的這部分我沒有完全得到。你想要用這樣的領域做什麼? https://docs.djangoproject.com/en/1.8/ref/models/relations/ – Wtower

+0

我無法理解概念本。假設用戶輸入一系列名單,「購物」,「音樂」,「食物」。我希望他們能夠打開名爲「音樂」的列表並添加一個新項目。然後添加另一個,然後添加另一個...等NewItem模型將需要顯示與該用戶關聯的所有列表。 – ryan