Django - 多对一关系 - 如何选择仅有子项的父模型

时间:2011-01-18 21:13:43

标签: django django-models

假设我在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)

我想选择有一个或多个与之关联的页面的章节,如何在查询中实现此目的?或者我是否必须选择所有部分,然后过滤掉没有手动页面的部分?

2 个答案:

答案 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关系来说太过分了,但它确实有效。