Наследование CBV в Django работает не так, как ожидалось

Я использую эти два класса для получения данных контекста и проверки разрешений соответственно:

class RestaurantView(View):
    def get_context_data(self):
        ctx = {'restaurant': get_object_or_404(Restaurant, slug=self.kwargs['slug'])}
        return ctx

class ManageRestaurantMixin(LoginRequiredMixin, UserPassesTestMixin, RestaurantView):
    def test_func(self):
        ctx = super().get_context_data()
        return ctx['restaurant'].owner == self.request.user

Теперь первый вариант работает, так что когда мне не нужно разрешение, я получаю ожидаемое поведение, например, с этим DetailView:

class Info(RestaurantView, DetailView):
    model = Restaurant
    context_object_name = 'restaurant'
    template_name = 'restaurant/info.html'
<
class EditInfo(ManageRestaurantMixin, UpdateView):
    model = Restaurant
    context_object_name = 'restaurant'
    template_name = 'restaurant/edit_info.html'
    fields = ['name', 'address', 'logo']
    success_url = '/account/myrestaurants'

Я понимаю, что контекст перезаписывается, но не понимаю как.

  1. Как я могу это решить?
  2. Есть ли лучший способ справиться с подобными ситуациями?
Вернуться на верх