Django过滤get_queryset中的ForeignKey关系

时间:2015-05-08 08:45:33

标签: django

我想知道该怎么做。  所以我有一个EmailAddress类,它与我的User类有一个ForeignKey关系

class EmailAddress(models.Model):

user = models.ForeignKey(allauth_app_settings.USER_MODEL, verbose_name=_('user'))
email = models.EmailField(unique=app_settings.UNIQUE_EMAIL,
                          verbose_name=_('e-mail address')) 

我还有一个UserProfile类,它与提到的User具有OneToOneField关系,如下所示:

class UserProfile(models.Model):

user = models.OneToOneField(User, related_name='profile')
attribute= models.CharField("attr", max_length=150, blank=False)

现在在admin.py中我想过滤用户,以便登录到admintool的当前用户只能看到来自共享某些属性的用户的电子邮件。问题是该属性保存在UserProfile中,我需要通过电子邮件到达那里。

基本上我不知道如何访问UserProfile中的'attribute'。我知道我想通过电子邮件找到该电子邮件所属的用户来过滤用户,然后将他的“属性”与发送请求的用户进行比较,以决定是否向他显示。

def get_queryset(self, request):
user = [User whos email is in the list]
qs = [the queryset]
[and then]
return qs.filter([filter so the user attribute = the request.user attribute])

我正在使用allauth btw。如果你想知道什么

 allauth_app_settings.USER_Model 

代表。

度过美好的一天!

1 个答案:

答案 0 :(得分:0)

您需要使用双下划线语法来跟踪关系。

qs.filter(user__userprofile__attribute=request.user.attribute)