Django:反向追踪关系
嘿,我有这样的模型:
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 = Galleries.objects.get(id=1)
。接下来,我想通过这个“galleries”对象来获取一些值……如果能获取特定语言的值,那就更好了……我对Django ORM的技能还不够,所以如果可以的话,请给我一些文档链接或者代码示例。谢谢!
2 个回答
1
你可能想使用对象的select_related方法,这样可以减少你发出的查询次数。select_related
gallery = Galleries.objects.select_related().get(id=1)
你可以为Values模型在类别外键中设置一个相关名称:
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")
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