как я могу отобразить представление, только если определенное поле имеет значение True? - Django - PullRequest
2 голосов
/ 26 марта 2020

Я создал подробные представления для сообщений в моем блоге на основе Django, используя класс DetailView generi c, и до сих пор все работает нормально. Проблема, однако, заключается в том, что у меня есть поле в моей модели постов, которое используется для установки статуса постов (активный, неактивный, заблокированный), и я хочу отображать подробные представления только тогда, когда статус активен. Если кто-нибудь знает способ достижения этого, пожалуйста, дайте мне знать, и я прошу вас быть как можно более подробным.

views.py

from .models import Post
from django.views.generic import DetailView

class PostDetailView(DetailView):
    model = Post
    context_object_name = 'post'
    template_name = 'blog/post-detail.html'

    def get_context_data(self, **kwargs):
        context = super(PostDetailView, self).get_context_data(**kwargs)
        context['title'] = Post.objects.filter(slug=self.object.slug).first()
        return context

1 Ответ

2 голосов
/ 26 марта 2020

В вашем DetailView вы можете фильтровать набор запросов, например, вы можете фильтровать с помощью:

from django.views.generic import DetailView

class PostDetailView(DetailView):
    queryset = Post.objects.filter(<b>active=True</b>)

    # &hellip;

DetailView будет извлекать элемент на основе первичного ключа и / или слага в queryset, поэтому, если элемент отсутствует в отфильтрованном наборе запросов, вы получите ошибку 404.

Здесь мы предполагаем, что модель Post имеет поле active:

class Post(models.Model):
    # &hellip;
    <b>active = models.BooleanField()</b>
    # &hellip;

Учитывая, что поле и значения различны, вы, конечно, должны соответствующим образом отфильтровать набор запросов.

...