跨越关系的 Django 查找 - 如何

Tho*_*mel 0 django django-models

我有一个地址模型,它有一个联系人模型的外键:

class Address(models.Model):
    street = models.CharField(max_length=25)
    postal_code = models.CharField(max_length=25)
    city = models.CharField(max_length=50)
    country = models.CharField(max_length=50)
    contact = models.ForeignKey(Contact, related_name='address to contact')

class Contact(models.Model):
    salutation = models.CharField(max_length=1, choices=salutation_choices, verbose_name="salutation")
    title = models.ForeignKey(Title, blank=True, null=True)
    ...
Run Code Online (Sandbox Code Playgroud)

现在我想根据地址对象的数据过滤我的联系人对象。因此,我想创建一个跨越关系的过滤器,遵循文档的这一部分:

查找跨度关系

我是这样试的:

result_set = Contact.objects.filter(address__street__contains='mystreet')
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

Cannot resolve keyword 'address' into field. Choices are: address to contact, birthdate..
Run Code Online (Sandbox Code Playgroud)

实际上错误消息告诉我有一个字段地址要联系,但问题是我如何引用它?

Dan*_*man 5

您已将related_nameon Contact设置为address to contact。这是 Django 用于从 Contact 到 Address 的反向关系的值 - 由于这不是有效的属性名称,我很惊讶它竟然有效。

删除此属性,您的查找应该可以工作。