我有个人资料模型
class Profile(models.model):
user=models.Foreignkey(user,null=True,blank=True)
和
class Moods(models.model):
email=models.CharField(null=True,blank=True)
mood=models.CharField(null=True,blank=True)
对于单个电子邮件,可能有许多情绪,如...
test@test.com happy
test@test.com sad
我想获取一个查询集,使得该电子邮件属于在个人资料模型中具有外键的用户,并且心情是为该用户创建的最新心情
答案 0 :(得分:0)
如果你的db后端是postgresql,你可以使用distinct(*fields)
:
Moods.objects\
.filter(email__in=User.objects.filter(profile_set__isnull=False).values_list('email', flat=True))\
.order_by('email', '-pk')\ # group by email, latest first
.distinct('email') # pick first for each email
@ e4c5提到的关于主键不是记录创建顺序的明确指标的限制仍然适用。另请注意,email
中的auth.User
并不唯一,因此,如果用户共享同一封电子邮件,则只会查询其中任何一封的最新情绪。