2013-12-23 69 views
0

我想弄清楚如何從我的模型與ForeignKey關係中獲取數據。我有以下models.py:Python Django - 訪問foreignkey數據

class wine(models.Model): 
    name = models.CharField(max_length=256) 
    year = models.CharField(max_length=4) 
    description = models.TextField() 

class collection(models.Model): 
    name = models.CharField(max_length=50) 
    description = models.TextField(null=True) 

class collection_detail(models.Model): 
    collection = models.ForeignKey(collection) 
    wine = models.ForeignKey(wine) 
    quantity = models.IntegerField() 
    price_paid = models.DecimalField(max_digits=5, decimal_places=2) 
    value = models.DecimalField(max_digits=5, decimal_places=2) 
    bottle_size = models.ForeignKey(bottle_size) 

葡萄酒是一個基本的表格,類別詳細是引用葡萄酒,並增加了用戶特定的數據(如支付的價格),以它的表。 Collection是一組collection_detail對象。

我很在努力如何訪問這些模型中的數據。我可以輕鬆顯示特定模型的數據,但在查看特定集合時,我無法訪問collection_detail.wine.name數據。我是否需要編寫特定的查詢來執行此操作?我可以從模板語言訪問這些數據嗎?我的數據模型在通過管理員查看時顯示正確,我可以添加我需要的數據和關係。

感謝您的幫助!

+0

集合包含許多collection_detail。所以沒有一個細節可以訪問,而是一個列表。要獲取此列表的查詢集,請使用collection.collection_detail_set –

回答

1

使用collection_detail_set獲得所有collection_detail的查詢集與該collection

如果你想要一個一對一的關係,而不是一個一對多的(這就是你使用ForeignKey),改變

collection = models.ForeignKey(collection) 

collection = models.OneToOneField(collection) 

和訪問collectioncollection_detail只需撥打collection_detail從您的collection模型。

+0

謝謝你們!使用shell我嘗試了以下內容: mycollections = collection.objects.filter(USER = 1)#GET只是我的用戶的收藏 MyCollection的= mycollections.objects.filter(ID = 1)#grab第一集合 但然後,我遇到了麻煩......我嘗試: mydetails = mycollection.collection_detail_set.all() ,我得到一個錯誤:AttributeError的:「查詢集」對象有沒有屬性「collection_detail_set」 有什麼想法? –

+0

另外,我想我需要一對多的關係,因爲我需要每個「集合」有很多「collection_detail」對象嗎? –

+1

'.filter'返回一個QuerySet(一組模型實例)。如果您有多個具有相同參數的對象(如數量= 5),這很有用。這意味着你必須使用'mycollection = mycollections.objects.filter(id = 1)[0]'。通過主鍵訪問對象的更好方法是使用'.get',即'mycollection = mycollections.objects.get(pk = 1)'。這將返回一個模型實例,而不是QueryObject。 –