Django查询设置具有特定外键的最新对象

时间:2017-01-19 09:41:05

标签: python django django-models

我有个人资料模型

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

我想获取一个查询集,使得该电子邮件属于在个人资料模型中具有外键的用户,并且心情是为该用户创建的最新心情

1 个答案:

答案 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并不唯一,因此,如果用户共享同一封电子邮件,则只会查询其中任何一封的最新情绪。