2013-12-23 51 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。 –