Как написать Mixin для набора запросов, который возвращает только данные, принадлежащие зарегистрированному пользователю? - PullRequest
0 голосов
/ 08 сентября 2018

Как написать общий Mixin для CBV, чтобы набор запросов возвращал только данные, принадлежащие зарегистрированному пользователю?

Возможно ли в Джанго?

Если это так ... Может кто-нибудь дать мне конкретные предложения или ответ, как это сделать в django ...

Спасибо

1 Ответ

0 голосов
/ 08 сентября 2018

вот так

class MyMixin:

    def get_queryset(self):
        qs = super(MyMixin, self).get_queryset()
        return qs.filter(owner=self.request.user)

если вам нужно что-то более гибкое, вы можете сделать

class MyMixin:
    my_field = None
    def get_queryset(self):
        qs = super(MyMixin, self).get_queryset()
        return qs.filter(**{self.my_field=self.request.user})

и в каждом классе, в котором используется миксин, вам необходимо заменить это поле для пользователя в качестве примера

from django.db import models
class MyModel(models.Model):
    user_owner = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
    )

тогда при реализации миксина в виде списка с моделью MyModel. т

from django.views import generic

class MyModelListView(MyMixin, generic.ListView):
    model = MyModel
    my_field = "user_owner"

переменная my_field должна иметь то же имя, что и поле в модели

...