Django:反向追踪关系

3 投票
2 回答
5728 浏览
提问于 2025-04-16 13:07

嘿,我有这样的模型:

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

撰写回答