0

次のモデルがあるとします。

class BaseModel(models.Model):
    modified_date = models.DateTimeField(auto_now=True)
    class Meta:
        abstract = True

class Map(BaseModel):
    ...

class MapItem(BaseModel):
    map = models.ForeignKey(Map)
    ...

またはそのMapsいずれかが最後に変更された時刻でソートするように ORM 呼び出しを構成するにはどうすればよいですか?MapMapItems

言い換えれば、生の SQL や Python に頼らずに、独自Mapの最大値と関連する最新の値を表す値をそれぞれに生成し、それによって並べ替えるにはどうすればよいでしょうか?Map'smodified_datemodified_dateMapItems

次のクエリを試しましたがlast_updated、クエリセットが評価されると値が空白になり、その理由がよくわかりません:

Map.objects.extra(select={
    "last_updated": "select greatest(max(maps_mapitem.modified_date), maps_map.modified_date) 
     from maps_map join maps_mapitem on maps_map.id = maps_mapitem.id"}).

前もって感謝します。

編集 0: Peter DeGlopper が指摘しているように、私の参加は間違っていました。結合を修正したところ、last_updated値は空白ではなくすべて等しくなりました。

Map.objects.extra(select={
    "last_updated": "select greatest(max(maps_mapitem.modified_date), maps_map.modified_date) 
     from maps_map join maps_mapitem on maps_map.id = maps_mapitem.maps_id"}).
4

1 に答える 1