Django фильтрует набор запросов на основе имени шаблона - PullRequest
0 голосов
/ 17 марта 2019

В моем приложении Django у меня есть 2 модели.Один называется Post, а другой называется Categories.Когда пользователь нажимает на категорию, я хочу, чтобы только сообщения этой категории отображались в подробном представлении категории.Например, если пользователь нажимает на медицинскую категорию, я хочу, чтобы отображались только сообщения в медицинской категории.

Модели:

class Category(models.Model):
    title = models.CharField(max_length=200)
    colorcode = models.CharField(max_length=20, blank=True, null=True)
    description = models.TextField()
    image = models.ImageField(blank=True, null=True)
    slug = models.SlugField(unique=True)

class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    text = models.TextField()
    sub_description = models.TextField(blank=True, null=True)
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)
    category = models.ForeignKey(Category, on_delete=models.CASCADE, blank=True, null=True)
    image = models.ImageField(blank=True, null=True)
    live = models.BooleanField(default=False)
    slug = models.SlugField(unique=True)

Просмотры:

class CategoryDetailView(DetailView):
model = Category

def get_context_data(self, **kwargs):
    context = super(CategoryDetailView, self).get_context_data(**kwargs)
    context['category_posts'] = Post.objects.filter(live=True)
    return context

Шаблон:

{% for post in category_posts %}
    <div class="post">
        <div class="post-title">
            {{ post.title }}
        </div>
        <div class="post-author">
            {{ post.author }}
        </div>
    </div>
{% endfor %}

1 Ответ

2 голосов
/ 17 марта 2019

В DetailView у вас есть доступ к фактическому отображаемому объекту (в вашем случае Category экземпляр) через self.object.

Таким образом, в вашем методе get_context_data вы можете сделать:

context['category_posts'] = Post.objects.filter(live=True, category=self.object)

Обратите внимание, что self.object может быть None, поэтому вы можете захотеть разобраться с этим делом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...