Django INNER JOIN使用带有WHERE子句的外键

时间:2014-07-17 04:28:32

标签: python mysql sql django

所以我有一个数据库结构,用户跟随其他用户。在内置的用户模型中,我有'first_name','username'等字段...友情模型如下:

class Friendship(models.Model):
    tail_user = models.ForeignKey(User,related_name='follower')   #The one who sent the friend request
    head_user = models.ForeignKey(User,related_name='followed')

某些用户在给定时刻没有first_name,稍后会更新。现在对于一个特定的用户(比如演员),我希望得到所有拥有first_name的朋友。像这样的东西

SELECT * FROM friendship JOIN user ON friendship.head_user_id=user.id WHERE user.first_name != ''

如果可能的话,如何在不使用子查询的情况下,如何在Django ORM中实现此目的。

我提供的SQL查询可能有误,只是为了传达我想表达的内容

1 个答案:

答案 0 :(得分:2)

您可以exclude()空的first_name值:

Friendship.objects.exclude(head_user__first_name='')

请注意,如果first_nameNULL(不是空字符串),则需要使用__isnull

Friendship.objects.exclude(head_user__first_name__isnull=True)

而且,是的,如果你想排除NULL和空值,你可以排除排除:

Friendship.objects.exclude(head_user__first_name__isnull=True) \
                  .exclude(head_user__first_name='')