【发布时间】:2018-12-02 20:05:41
【问题描述】:
所以我在 Django REST 中做一个小项目,我还在习惯 ORM。我正在处理以下 Django 模型:
class Session(models.Model):
date = models.DateTimeField(default=now, blank=False)
owner = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='efforts', on_delete=models.CASCADE)
我对每个所有者在特定月份的会话数特别感兴趣。如下:
Session.objects.filter(date__gte=start, date__lt=end).values('owner').annotate(num_sessions=Count('owner')).order_by("owner")
此查询产生以下结构的结果:
(owner, count)
在序列化程序中,我想使用所有者来检索用户名,以构造响应。我这样做绝对没有运气。我的序列化器现在看起来像这样:
class SessionAggregateSerializer(serializers.ModelSerializer):
num_sessions = serializers.IntegerField(read_only=True)
owner = serializers.IntegerField(read_only=True)
class Meta:
model = Session
fields = ('id', 'owner', 'num_sessions')
有人对如何解决这个问题有任何建议吗?对于常规查询,我使用以下行来检索用户名,但这在当前设置中不再适用:
owner = serializers.ReadOnlyField(source='owner.username')
【问题讨论】:
-
如果您一次只检索一条记录,我认为使用
<owner>.efforts.count()而不是您的注释功能更简洁。 -
感谢您的建议。我对 ORM 的尴尬感觉感到惊讶。
标签: django orm django-rest-framework