Как реализовать фильтр наборов запросов администратора django из расширенного класса модели пользователя - PullRequest
0 голосов
/ 16 декабря 2018

Я расширил класс модели пользователя по умолчанию в Django (просто для сохранения user 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'    

1 Ответ

0 голосов
/ 16 декабря 2018

Вы пытаетесь извлечь state_id из экземпляра userprofileinfo, связанного с объектом пользователя.

Все выглядит хорошо, но экземпляр доступен как userprofileinfo, а не UserProfileInfo, поэтому измените qs как:

qs.filter(state_id=request.user.userprofileinfo.state_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...