2

私が持っている場合

Model.objects.all()

content_object=foo、object_id=N のオブジェクトを 1 つだけ取得したい。どうやってやるの?-datetime で注文しているとします。任意の content_type=foo、object_id=N のクエリセットでオブジェクトを 1 つだけ取得できる場合、それは最新のものである必要があります。

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 時間以内のすべてのチェックインが得られますが、content_type=foo および object_id=N ごとに 1 つのオブジェクトのみが必要です。

4

1 に答える 1

3

フィルタリングを行った後、最新のモデルオブジェクトを検索しますか? object id とはどういう意味ですか? 外部キーですか?それとも、django によって自動生成されたモデル 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 に答える