2

如果我有

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。

4

1 回答 1

3

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

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

编辑:

我道歉。好吧,这个问题一开始并不是清楚(而且我新手)。这是一种天真的方法(我认为您想要distinct):

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
于 2009-08-22T08:16:22.273 回答