假设我在Django 1.2中有这种模型关系......
class Section(models.Model):
title = models.CharField(max_length=200)
class Page(models.Model):
section = models.OneToOneField(Section)
title = models.CharField(max_length=200)
我想选择有一个或多个与之关联的页面的章节,如何在查询中实现此目的?或者我是否必须选择所有部分,然后过滤掉没有手动页面的部分?
答案 0 :(得分:2)
更改为:
class Section(models.Model):
title = models.CharField(max_length=200)
page = models.ForeignKey(Page, related_name="section")
class Page(models.Model):
title = models.CharField(max_length=200)
选择包含一个或多个页面的部分:
result_q = Section.objects.filter(page__isnull=False)
答案 1 :(得分:2)
如果100%确定isnull
在所有这些情况下都能正常工作,我会第二个sza的答案 - 但我没有检查过,所以我不确定(即使我偶尔会将它用于此类目的): - )
我确信这是:
from django.db import models
Section.objects.annotate(page_num=models.Count('page')).filter(page_num__gt=0)
- 虽然计算对于你的案件可能对OneToOneField关系来说太过分了,但它确实有效。