Django过滤查询外键

flo*_*bee 24 django

我正在努力为我的项目获得正确的查询.这是一个示例或我的模型:

from django.db import models

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()

    def __unicode__(self):
        return self.name

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()

    def __unicode__(self):
        return u'%s %s' % (self.first_name, self.last_name)

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

    def __unicode__(self):
        return self.title
Run Code Online (Sandbox Code Playgroud)

我如何从书籍类中获得出版物,例如我希望所有出版商都能获得标题为'hello'的所有书籍?谢谢

Pav*_*sov 41

如果你想获得发布者,你必须从头开始Publisher.这意味着您必须向后查询Book→Publisher关系.以下是文档对此的说法:

跨越关系的查找

要跨越关系,只需使用跨模型的相关字段的字段名称,用双下划线分隔,直到到达所需的字段

...

要引用"反向"关系,只需使用模型的小写名称.

查询:

Publisher.objects.filter(book__title__startswith='hello')
Run Code Online (Sandbox Code Playgroud)

  • @ArindamRoychowdhury:`Book.objects.filter(publisher__name ='Some')` (3认同)