Наследование 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'
Я понимаю, что контекст перезаписывается, но не понимаю как.
- Как я могу это решить?
- Есть ли лучший способ справиться с подобными ситуациями?