首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Django中的最大日期过滤注释

用Django中的最大日期过滤注释
EN

Stack Overflow用户
提问于 2015-12-13 08:12:52
回答 1查看 367关注 0票数 0

我在Django有3种型号--项目:

代码语言:javascript
复制
class Hardware(models.Model):
    inventory_number = models.IntegerField(unique=True,)

class Subdivision(models.Model):
    name = models.CharField(max_length=50,)

class Relocation(models.Model):
    hardware = models.ForeignKey('Hardware',)
    subdivision = models.ForeignKey('Subdivision',)
    relocation_date = models.DateField(verbose_name='Relocation Date', default=date.today())

表'Hardware_Relocation‘的值,例如:

代码语言:javascript
复制
id hardware subdivision relocation_date

1 1 1   01.01.2009
2 1 2   01.01.2010
3 1 1   01.01.2011
4 1 3   01.01.2012
5 1 3   01.01.2013
6 1 3   01.01.2014
7 1 3   01.01.2015 # Now hardware 1 located in subdivision 3 because relocation_date is max

我想写一个过滤器,以找到硬件的细分今天。

我试着写一个过滤器:

代码语言:javascript
复制
subdivision = Subdivision.objects.get(pk=1)
hardware_list = Hardware.objects.annotate(relocation__relocation_date=Max('relocation__relocation_date')).filter(relocation__subdivision = subdivision)

现在hardware_list包含硬件1,但是它是错误的(因为现在硬件1在细分3中)。在本例中,hardware_list必须为None。

以下代码工作错误(hardware_list包含硬件1,用于细分1)。

代码语言:javascript
复制
limit_date = datetime.datetime.now()
q1 = Hardware.objects.filter(relocation__subdivision=subdivision,  relocation__relocation_date__lte=limit_date)
q2 = q1.exclude(~Q(relocation__relocation_date__gt=F('relocation__relocation_date')), ~Q(relocation__subdivision=subdivision))
hardware_list = q2.distinct()

也许最好使用SQL?

EN

回答 1

Stack Overflow用户

发布于 2015-12-13 08:51:10

这可能管用..。

代码语言:javascript
复制
from django.db.models import F, Q
Hardware.objects
    .filter(relocation__subdivision=target_subdivision, relocation__relocation_date__lte=limit_date)
    .exclude(~Q(relocation__subdivision=target_subdivision), relocation__relocation_date__gt=F('relocation__relocation_date'))
    .distinct()

这个想法是,给我所有在限制日期之前被转移到目标部门的硬件,这些硬件在限制日期之前没有被转移到其他部门。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34249203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档