Django:追随关系

时间:2011-03-06 18:21:31

标签: python django orm

嘿,我有这样的模特:

class Galleries(models.Model):
  creation_date = models.DateTimeField()
  name = models.CharField(max_length=255, unique=True)
  gallery_type = models.ForeignKey(Categories)

class Categories(models.Model):
  handle = models.CharField(max_length=255, unique=True)

class Values(models.Model):
  category = models.ForeignKey(Categories)
  language = models.CharField(max_length=7)
  category_name = models.CharField(max_length=50)

现在,我只想从画廊开始,达到类别的价值。例如:galleries = Galleries.objects.get(id=1)。现在我希望通过使用这个“画廊”对象以某种方式达到价值......用特定语言获得价值会好得多......我想念Django ORM的技能,所以如果可以,请指点我docs或给出一些代码示例。谢谢!

2 个答案:

答案 0 :(得分:5)

galleries = Galleries.objects.get(id=1)
values = galleries.gallery_type.values_set.filter(language='language')

有趣的是,您使用了文档用于引用相关字段查找的确切措辞。我总觉得这个定义对于肠道来说很奇怪,也许是因为他们把它放在引号中。

  

关系“后退”

http://docs.djangoproject.com/en/1.2/topics/db/queries/#following-relationships-backward

答案 1 :(得分:1)

您可能希望使用select_related对象方法,以减少正在进行的查询次数。 select_related

gallery = Galleries.objects.select_related().get(id=1)

您可以在类别fk中设置值模型的相关名称:

class Values(models.Model):
  category = models.ForeignKey(Categories, related_name="categories")
  language = models.CharField(max_length=7)
  category_name = models.CharField(max_length=50)

现在,您可以通过

获取特定语言的值列表
values = gallery.gallery_type.categories.filter(language="language")