Django 1.9如何筛选子项';s儿童';带or语句的模型?

Django 1.9如何筛选子项';s儿童';带or语句的模型?,django,django-models,Django,Django Models,我有一个父模型目录及其子模型产品和产品的子模型选项。 目录和产品的关系是OneTONE,产品和期权的关系是OneToMany 我想筛选一个选项是否满足条件,返回目录模型 下面是我的代码 class Catalog(models.Model): product = models.ForeignKey(models.Product) class Product(models.Model): objects = ProductManager() class ProductOptio

我有一个父模型目录及其子模型产品和产品的子模型选项。 目录和产品的关系是OneTONE,产品和期权的关系是OneToMany

我想筛选一个选项是否满足条件,返回目录模型

下面是我的代码

class Catalog(models.Model):
    product = models.ForeignKey(models.Product)

class Product(models.Model):
    objects = ProductManager()

class ProductOptions(models.Model):
    product = models.ForeignKey(Product, related_name = 'options')

class ProductManager(models.Manager):
    def get_queryset(self):
        queryset = super(ProductManager, self).get_queryset()
        queryset = queryset.prefetch_related('options')
        return queryset
到目前为止我试过的是

如果没有or语句,此查询可以正常工作

catalog_query = models.Catalog.objects.all()
catalog_query = catalog_query.filter(product__options__date=datetime(2018,10,24)
但当我放入or语句时,它会返回重复的目录数据

catalog_query = models.Catalog.objects.all()
catalog_query = catalog_query.filter(product__options__date=datetime(2018,10,24) | catalog_query.filter(product__quantity_limit=True)
您需要“Q对象”:

文档中的示例:

Q(question__startswith='Who') | Q(question__startswith='What')
因此,您的示例如下所示:

from django.db.models import Q

catalog_query = catalog_query.filter(
    Q(product__options__date=datetime(2018,10,24))
    | Q(catalog_query.filter(product__quantity_limit=True))
在queryset上使用“.distinct()”删除重复项:


谢谢!!!它就像一个符咒!!函数distinct()就是我想要的!!我有个问题要问你,@EricLee:你的查询集有或没有Q对象都不会引起语法错误?所以我不明白为什么:D