【问题标题】:Django ORM FilteringDjango ORM 过滤
【发布时间】:2017-05-23 10:44:08
【问题描述】:

我的模型如下所示:

Person(model.Models):
    name = model.CharField(max_length=32)
    date_added = models.DateTimeField(auto_now_add=True)

Note(model.Models):
    person = model.ForeignKey(Person)
    action = model.CharField(max_length=32, default='call)
    date_added = models.DateTimeField(auto_now_add=True)
    owner = model.ForeignKey(User)

我的看法:

def get_working_persons(self):
    relevant_actions = ['call', 'meeting', ...]
    query = Q(action__in=relevant_note_actions) | Q(date_added__range=[fourteen_days_ago, now])
    get_current_person_notes = Note.objects.filter(query).exclude(~Q(owner=request.user)).values('owner', 'action', 'person')

这将返回一个笔记列表,其中每个人都有列出的所有笔记,这些笔记发布在 date_added__range 内。如何获取该日期范围内每个人的最后一个符合其他条件的注释?

【问题讨论】:

    标签: python django django-orm


    【解决方案1】:
    Note.objects.filter(query).exclude(~Q(owner=request.user)).values('owner', 'action', 'person').first()
    

    将返回查询集的顶部对象 或

    Note.objects.filter(query).exclude(~Q(owner=request.user)).values('owner', 'action', 'person').last()
    

    将返回查询集的最后一个对象

    或按字段名最新的

     Note.objects.filter(query).exclude(~Q(owner=request.user)).values('owner', 'action', 'person').latest('field_name')
    

    【讨论】:

    • 非常感谢。据我所知,这将只返回最后一个对象。我想得到每个人的最后一个对象。比如:Select * from note where date_added between now AND fourteen_days_ago GROUP BY 'person'
    • @pawel.ad 这看起来像我需要的!谢谢
    猜你喜欢
    • 2021-10-01
    • 2016-04-22
    • 2011-04-17
    • 2021-09-13
    • 2018-11-18
    • 2022-11-03
    • 2010-11-04
    • 2011-05-19
    相关资源
    最近更新 更多