【问题标题】:Querying records not in through table通过表查询不在的记录
【发布时间】:2013-11-09 13:02:24
【问题描述】:
恢复 Django 示例:
from django.db import models
class Publication(models.Model):
title = models.CharField(max_length=30)
class Article(models.Model):
headline = models.CharField(max_length=100)
publications = models.ManyToManyField(Publication)
如何获得所有没有发表的文章?
Article.objects.filter(...)
【问题讨论】:
标签:
django
orm
many-to-many
django-queryset
【解决方案1】:
将publications 指定为无:
Article.objects.filter(publications=None)
例子:
>>> p1 = Publication.objects.create(title='1')
>>> p2 = Publication.objects.create(title='2')
>>> a1 = Article.objects.create(headline='a')
>>> a2 = Article.objects.create(headline='b')
>>> a3 = Article.objects.create(headline='c')
>>> a1.publications.add(p1)
>>> a1.publications.add(p2)
>>> a3.publications.add(p1)
>>> Article.objects.filter(publications=None)
[<Article: Article object>]
>>> _[0].headline
u'b'
【解决方案2】:
Article.objects.filter(publications=None)
将带有出版物字段的空白=True 定义到文章模型中,否则它将不允许您创建没有出版物的文章。
publications = models.ManyToManyField(Publication, blank=True)