在外键上按字段过滤

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在外键上按字段过滤相关的知识,希望对你有一定的参考价值。

我有两个相互关联的模型

class IndustryService(models.Model):    
    title = models.CharField(max_length=120)
    pricingisarate = models.BooleanField(default=False) 

class UserService(models.Model):  
    user = models.ForeignKey(User, on_delete=models.CASCADE) 
    title = models.ForeignKey(IndustryService, on_delete=models.CASCADE, null=True, blank=True)

在视图中,我正在尝试开发一个UserService实例的查询集

a)属于用户

b)关于外键,有pricingisarate == True

我尝试了以下查询,但它不起作用:

 services = UserService.objects.filter(user=user, industryservice__pricingisarate__is=True)

谢谢你的帮助!!!

答案

得到它了!

services = UserService.objects.filter(user=user, title__pricingisarate=True)
另一答案

您可以通过在外键定义的名称和要由此过滤的子字段名称之间使用双下划线来过滤外键字段,对于您的情况,它类似于下面:

title__pricingisarate

您的查询必须更改如下:

services = UserService.objects.filter(user=user, title__pricingisarate=True)

一些formal examples of Django about this article可用...

另一答案
services = UserService.objects.filter(user=user, title__pricingisarate=True)

因为UserService与使用查找标题的IndustryService模型有关。

请参考此链接 - https://docs.djangoproject.com/en/2.1/topics/db/queries/#lookups-that-span-relationships

以上是关于在外键上按字段过滤的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 EF 在外键上允许空值?

Symfony2 在外键上传递参数返回总是 null

我应该在外键上使用 onDelete=cascade 吗?

Oracle SQL Developer - 在外键上添加约束

Flutter web,禁用Tab按下按钮上的焦点

在按钮单击或输入键上发送文本字段输入