基本上,我有一个带有一堆外键的表,并且试图通过“创建的”字段仅查询特定键的第一次出现。以Blog / Entry示例为例,如果Entry模型具有Blog的外键和User的外键,那么我如何构造查询以选择特定用户在其中为各个Blog编写第一个条目的所有条目?
class Blog(models.Model):
...
class User(models.Model):
...
class Entry(models.Model):
blog = models.Foreignkey(Blog)
user = models.Foreignkey(User)
我认为选择博客的第一个条目是我所缺少的,我可以通过追加附加内容来简单地过滤到特定用户:
query = Entry.objects.magicquery.filter(user=user)
但是也许还有其他更有效的方法。谢谢!
最佳答案
query = Entry.objects.filter(user=user).order_by('id')[0]
基本上按ID排序(从最低到最高),然后对其进行切片,以仅从QuerySet中获得第一个匹配。
我现在没有可用的Django安装来测试我的产品线,因此,如果我有上述类型,请检查文档:
order by
limiting querysets
顺便说一下,有关“限制queysets”手册部分的有趣注释:
而是检索单个对象
而不是列表(例如SELECT foo FROM bar
LIMIT 1),请改用简单索引
一片例如,这返回
数据库中的第一个条目,之后
按字母顺序排序条目
标题:
Entry.objects.order_by('headline')[0]
编辑:好的,这是迄今为止我能提出的最好的建议(在您和我的评论之后)。它不返回Entry对象,但其ID为entry_id
。query = Entry.objects.values('blog').filter(user=user).annotate(Count('blog')).annotate(entry_id=Min('id'))
我会继续寻找更好的方法。