Как правильно запретить действие пользователя в 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'