Как правильно запретить действие пользователя в django?

Я разрабатываю электронную коммерцию. В настоящее время я хочу предотвратить доступ пользователя к Product DetailView просроченных продуктов. Я могу сделать это с помощью UserPassesTestMixin, но так как я не тестирую ни один userType, я не знаю, является ли это лучшим способом.

models.py

class ProdutosDetail(UserPassesTestMixin, DetailView):
    model = Produto
    template_name = "produto/produto_detail.html"
    context_object_name = "product"


    def test_func(self):
        try:
            assert self.get_object().expiration_date > date.today()
        except AssertionError:
            return False
        else:
            return True

Если ситуация с результатом не связана с пользователем, вы можете опустить их в самом наборе запросов? (что приведет к 404s). Если все же есть "специальные" пользователи, которые должны иметь возможность просматривать объекты, вы можете переопределить 'get_queryset' или использовать какой-то миксин, как вы уже предлагали.

Пользователю не нужно проходить тест, объект, таким образом, можно фильтровать с помощью:

from django.db.models.functions import Now


class ProdutosDetail(DetailView):
    model = Produto
    queryset = Producto.objects.filter(expiration_date__gt=Now())
    template_name = 'produto/produto_detail.html'
    context_object_name = 'product'
Вернуться на верх