如果我有
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.
答案 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