【问题标题】:How to implement django admin queryset filter with from extended user model class如何使用扩展用户模型类实现 django admin 查询集过滤器
【发布时间】:2019-05-16 21:52:36
【问题描述】:

我已经使用以下模型扩展了 Django 默认用户模型(只是为了保存用户 state_id)类。

class UserProfileInfo(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE,)

    state_id = models.IntegerField(blank=False)

    def __str__(self):
       return self.user.username

现在我想通过登录用户的state_id 过滤数据。我试图实现查询集过滤器,但它什么也没做。

class VisVisitsAdmin(admin.ModelAdmin):

    list_per_page = 10
    list_display = ('visit_id','visit_no','user_name','mobile_number','program_name','state_name','district_name','block_name','school_name',)

    list_filter = ('date_of_visit',)

    def queryset(self, request):
        qs = super(VisVisitsAdmin, self).get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(state_id=request.user.UserProfileInfo.state_id)

    def state_name(self, obj):
        if obj.school_program:
            return obj.school_program.school.cluster.block.district.state.name_of_state
    state_name.short_description = 'state name'    

【问题讨论】:

    标签: python-3.x django-admin django-queryset


    【解决方案1】:

    您正在尝试从与用户对象相关的 userprofileinfo 实例中获取 state_id。

    一切似乎都很好,但实例可用 userprofileinfo 而不是 UserProfileInfo ,所以将 qs 更改为:

    qs.filter(state_id=request.user.userprofileinfo.state_id)
    

    【讨论】:

      猜你喜欢
      • 2014-10-25
      • 2010-12-11
      • 2015-09-06
      • 2011-02-26
      • 1970-01-01
      • 2011-02-06
      • 2023-04-11
      • 2012-07-18
      • 1970-01-01
      相关资源
      最近更新 更多