Как я могу получить статьи с одним и тем же тегом, чтобы в шаблоне я мог отображать эти статьи? - PullRequest
1 голос
/ 07 июля 2019

Я новичок в Django, так что спасибо за любую помощь.У меня есть модель Article, и я хотел бы отображать похожие / похожие статьи, назначая теги для каждой статьи.

Я попытался создать функцию / фильтр в моем views.py, который наследуется от себя (этой конкретной статьи) и отфильтровывает статьи с тем же тегом, но безуспешно.

from django.db import models

class Article(models.Model):
  title = models.CharField(max_length=200, blank=True)
  thumbnail = models.ImageField(max_length=200, blank=True)
  tag = models.CharField(max_length=200, blank=True)

from .models import Article

class ArticleView(DetailView):
    template_name = "article/article.html"
    model = Article

    def related_articles(self):
        tagged = Article.objects.filter(tag=self.tag)
        
        return tagged

{% if articles.objects.all %}
  {% for article in article.objects.all|related_articles %}
  <div>
    <img src="{{ article.thumbnail.url }}">
    <span>{{ article.title }}</span>
  </div>
  {% endfor %}
{% endif %}

Итак, всякий раз, когда я пытаюсь использовать этот фильтр, я не получаю результатов.

1 Ответ

0 голосов
/ 07 июля 2019

Я думаю, что функция related_articles должна быть в классе модели.

from django.db import models

class Article(models.Model):
  title = models.CharField(max_length=200, blank=True)
  thumbnail = models.ImageField(max_length=200, blank=True)
  tag = models.CharField(max_length=200, blank=True)

  def related_articles(self):
    tagged = Article.objects.filter(tag=self.tag).exclude(pk=self.pk)

Предположим, у вас есть такой вид:

def articles(request):
    articles = Articles.objects.all()
    context = dict(articles=articles)

    return render(request, 'app/articles.html', context)

У вас может быть такой шаблон:

{% if articles|length %}
  {% for article in articles %}
  <div>
    <img src="{{ article.thumbnail.url }}">
    <span>{{ article.title }}</span>
    {% for related_article in article.related_articles %}
        <span>{{ related_article.title }}</span>
    {% endfor %}
  </div>
  {% endfor %}
{% endif %}
...