Django - 如何只使用一个查询集的字段组合获得2个对象

时间:2009-08-22 07:58:04

标签: database django api content-type django-queryset

如果我有

Model.objects.all()

我想为任何content_object = foo,object_id = N只获取一个对象。我怎样才能做到这一点?说我按-datetime订购。如果我只能在查询集中获取任何content_type = foo,object_id = N ...它应该是最新的..如何指定我只想要1个对象用于content_object和object_id的任何组合?

class CheckIn(models.Model):
    ...
    owner = models.ForeignKey('auth.User')
    datetime = models.DateTimeField(editable=False, auto_now=True)

    ...
    # This is the object that should be geocoded, hopefully
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey()

    class Meta:
        ordering=( '-datetime', )

然后取一个查询集:

checkins = CheckIn.objects.filter(
        datetime__gte=datetime.datetime.now() -
        datetime.timedelta(hours=24),
)

这可以在过去24小时内为我提供所有签到但我只想要1个对象PER content_type = foo和object_id = N.

1 个答案:

答案 0 :(得分:3)

您想在进行一些过滤后找到最新的 Model 对象吗?对象id是什么意思?它是外键吗?或者它是由django自动生成的模型ID?我想是晚了。在这种情况下,您只能使用 id 。这可能会对您有所帮助(我假设您的模型中至少包含以下字段:content_object,dateField):

Model.objects.filter(content_object=foo,id=N).order_by(dateField)[0]

修改

我道歉。好吧,问题是开头没有这个(我一个新的)。这是一种天真的方法(我认为你想要不同):

d={}
[d.setdefault(str(a.content_type)+str(a.object_id),a) for a in checkins ]
d.values() # this gives your desired list of distinct objects