管理员中的 Django Allauth 过滤器 "Email addresses"

Django Allauth filter "Email addresses" in Admin


我正在使用 django-allauth,我有一个问题。为了过滤我的用户模型的管理站点中的数据,我使用以下代码:

def get_queryset(self, request):
    qs = super(UserAdmin, self).get_queryset(request)
    if request.user.is_superuser:
        return qs
    return qs.filter(profile__country=request.user.profile.country)

它让管理员用户(不是超级用户)只能看到来自他们国家的用户的表格。

我还想过滤由 allauth 创建的名为 "Accounts" - > "Email Addresses" 的标准列中的数据,但我不知道那是哪个查询集。如果有任何提示,我将不胜感激。

祝大家有个愉快的一天!

解决方法在这里:->

admin.py 看起来像这样:

from allauth.account.models import EmailAddress
from allauth.account.admin import EmailAddressAdmin


class CustomAllauthAdmin(EmailAddressAdmin):

    def get_queryset(self, request):
        qs = super(EmailAddressAdmin, self).get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(user__profile__country=request.user.profile.country)

admin.site.unregister(EmailAddress)
admin.site.register(EmailAddress, CustomAllauthAdmin) 

由于它是第三方应用程序,您首先需要在自己的 admin.py 中覆盖其管理。查看答案 here 以获取示例。

至于查询集,您检查 EmailAddress 模型的 allauth 模型。它使用 'user' 字段链接到用户。因此,您可以像这样链接您的查询:

 qs = super(EmailAddressAdmin, self).get_queryset(request)
    if request.user.is_superuser:
        return qs
    return qs.filter(user__profile__country=request.user.profile.country)