我有这些模型:

class Event(models.Model):

    title = models.CharField(max_length=200)
[...]

class dateEvent(models.Model):

    event = models.ForeignKey('Event', on_delete=models.CASCADE)
    start_date_time = models.DateTimeField(auto_now=False, auto_now_add=False)
[...]

在我的views.py中,我想创建一个查询,在给定特定参数(开始日期等)的情况下 Select 一个事件.我对我的问题没有异议:

distinct = Event.objects.values('id').annotate(id_count=Count('id')).filter(id_count=1)
events = Event.objects.filter(Q(dateevent__start_date_time__gte=start_date) & Q(dateevent__start_date_time__lte=end_date))

如果每个event有超过dateevent个,这会带来更理想的结果,但我不想要.这是我获取不同值的try ,但失败了,出现了'QuerySet' object has no attribute 'Q'个错误.我错过了什么?

events = Event.objects.filter(id__in=[item['id'] for item in distinct]).Q(dateevent__start_date_time__lte=end_date).distinct().exclude(type='recording release').order_by('dateevent__start_date_time')

推荐答案

我觉得你把事情弄得太复杂了.你可以使用.distinct() [Django-doc]:

Event.objects.filter(
    dateevent__start_date_time__gte=start_date,
    dateevent__start_date_time__lte=end_date
).distinct()

你不能在相关的dateEvent上写.order_by(..),因为那样你就成为SELECT ...条款的一部分,并阻止uniqness过滤器正常工作.但是,您可以在其上使用聚合.例如:

from django.db.models import Min

Event.objects.exclude(type='recording release').filter(
    dateevent__start_date_time__gte=start_date,
    dateevent__start_date_time__lte=end_date
).alias(
    first_event=Min('dateevent__start_date_time')
).order_by('first_event').distinct()

Python-3.x相关问答推荐

小部件padx和包方法ipadx有什么不同?

Django 模型类方法使用错误的 `self`

aiogram机器人中处理文本输入异常而不是按钮点击的回调函数.

为什么不能用格式字符串 '-' 绘制点?

如何将 WebDriver 传输到导入的测试?

pytorch 中 mps 设备的 manual_seed

使用大型多个数据集,其中每个数据集包含多个值 - Pytorch

无法使用 Python 和 Selenium 检索 href 属性

ImportError:无法从jinja2导入名称escape

如何准确测定cv2的结果.在BW/黑白图像中查找对象?

Python socket.error: [Errno 13] 权限被拒绝

错误:预期语句,发现 py:Dedent

无法在 macOS 上的 Anaconda3 python3.6 上安装 OpenCV3

如何确定一个类的元类?

如何在 Python 3 中通过 IP 获取 WhoIs 信息?

如何通过命令行将数组传递给python

通过多个键对字典列表进行分组和聚合

为现有项目创建virtualenv

python中的订单字典索引

如何从集合中删除多个元素?