get_queryset中的Django筛选器外键关系

get_queryset中的Django筛选器外键关系,django,Django,我不知道在这里做什么。 因此,我有一个EmailAddress类,它与我的用户类具有ForeignKey关系 class EmailAddress(models.Model): user = models.ForeignKey(allauth_app_settings.USER_MODEL, verbose_name=_('user')) email = models.EmailField(unique=app_settings.UNIQUE_EMAIL,

我不知道在这里做什么。 因此,我有一个EmailAddress类,它与我的用户类具有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类,它与提到的用户具有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中的“属性”。我知道我想通过接收电子邮件来筛选用户,找到此电子邮件所属的用户,然后将其“属性”与发送请求的用户进行比较,以决定是否向其显示该属性

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顺便说一句,以防你想知道什么

 allauth_app_settings.USER_Model 
代表


祝你今天愉快

您需要使用双下划线语法来遵循这些关系

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

我如何获得用户实例?我尝试了
user=user.objects.filter(email=request.email)[0]
UserProfile.objects.filter(user\uu id=request.id):
但不起作用。您已经在
request.user
中使用了它。你不需要买别的东西。我上面显示的代码可能是
get_queryset()
方法的全部内容。这是我的问题,因为如果我这样做
def get_queryset(self,request):qs=super(EmailConfirmationAdmin,self)。get_queryset(request)qs.filter(user\u userprofile\u attribute=request.user.profile.attribute)return qs
im收到此错误消息:
无法将关键字“user”解析到字段中。选项包括:已创建、电子邮件地址、电子邮件地址、id、id、密钥、已发送
,这不是获取当前用户的问题,而是查询模型的问题。这是因为您没有在问题中提供所有相关信息:这些字段来自一个完全不同的模型(可能是EmailConfirmation?),这显然是与此admin类相关的模型。由于该模型显然有一个名为
email\u address
的字段,它是EmailAddress的外键,因此您应该在我上面给出的筛选值的开头添加
email\u address
。实际上,我有点困惑,忘记了提到这一点,最后它确实与
(email\u address\u user\u profile\u attribute=request.user.profile.attribute)
我了解了查找的工作原理。感谢您的耐心等待。