【发布时间】:2020-06-17 13:49:16
【问题描述】:
获取 Django 实例相关对象的相关对象的最大日期时间的最佳方法是什么?我需要这个值作为实例属性。
例如,对于这些模型,
class Show(Model):
is_live = BooleanField()
...
class Season(Model):
show = ForeignKeyField(Show, on_delete=CASCADE, related_name='seasons')
is_live = BooleanField()
...
class Episode(Model):
season = ForeignKeyField(Season, on_delete=CASCADE, related_name='episodes')
is_live = BooleanField()
live_date = DateTimeField(blank=True, null=True)
...
如何获取节目实例的最新剧集live_date,仅包括剧集 is_live == True 和剧集 is_live == True 的剧集?
我已经在Show 模型中尝试过这个:
@property
def max_episode_live_date(self)
return self.seasons.filter(
is_live=True
).aggregate(
max_=Max(
'episodes__live_date',
filter=Q(episodes__is_live=True)
)
).get('max_')
但我收到此错误 AttributeError: 'str' 对象没有属性 'tzinfo'
我尝试过使用Django SubQuery expressions,
@property
def max_episode_live_date(self)
episodes = Episode.objects.filter(
is_live=True,
season=OuterRef('pk')
).values('live_date')
return self.seasons.filter(
is_live=True
).aggregate(
max_=Max(Subquery(episodes))
).get('max_')
然后我得到 django.db.utils.OperationalError: (1242, '子查询返回超过 1 行')
我相信这是由于某些剧集包含 null live_date,但我不确定如何解决。任何见解将不胜感激。
【问题讨论】:
标签: python django datetime aggregation