Django获取模型数据:某个值大于另一个值

-2 投票
4 回答
853 浏览
提问于 2025-04-17 10:54

在Django中,我有这样一个模型:

class downloads(models.Model):
date = models.CharField(max_length=50)
ip = models.ForeignKey(IPaddress)
partnum = models.ForeignKey(partnum)
user = models.ForeignKey(userinfo)
filename = models.CharField(max_length=128)
issueId = models.ForeignKey(issueInfo)

我需要做的是从这个表中获取数据,条件是日期要大于日期1并且小于日期2。

我知道如果我使用PHP,我可以查询数据库,做类似于 select * from downloads where date > date1 and date < date2 的操作,这样就能得到一个可以遍历的数据集。那么在Django中我该怎么做呢?

我想大胆猜测一下,可能是这样的:

d = downloads.objects.get('Where date > date1 and date < date2')

或者

d = downloads.objects.get(date=>date1,date<=date2)

我对Python和Django非常陌生(上周才开始学习……),任何帮助都非常感谢。

谢谢

编辑:感谢大家的快速回复 - 我已经找到了我新问题的答案。

4 个回答

1

看看这个链接:

https://docs.djangoproject.com/en/dev/topics/db/queries/#field-lookups

d = Downloads.objects.filter(date__gt= dateParam1, date__lt= dateParam2 )
2

好好看看Django的文档,它们真的很棒而且内容很全面。

在你的情况下,你应该查看一下关于查询集的文档,因为你几乎不直接写SQL,而是通常使用Django的ORM。

在你的情况下,我建议你考虑使用range查找

start_date = datetime.date(2005, 1, 1)
end_date = datetime.date(2005, 3, 31)
Entry.objects.filter(pub_date__range=(start_date, end_date))
2

如果你在使用Django的ORM(对象关系映射),那么可以这样做:

downloads = Downloads.objects.filter(date__range=(dat1, date2))

或者

downloads = Downloads.objects.filter(date__gt=date1, date__lt=date2)

这样可以根据条件筛选你的对象。__gt的意思是“大于”,而__lt的意思是“小于”。

想要更详细的解释,可以查看文档: https://docs.djangoproject.com/en/dev/ref/models/querysets/#filter

https://docs.djangoproject.com/en/dev/ref/models/querysets/#gt

撰写回答