Django: как отобразить ManyToManyField в html-файле?

Я хочу отобразить ManyToManyField в Django на html странице.

Этот код находится в файле models.py:

class Keyword(models.Model):
    keyword     = models.CharField(max_length=20, null=True)
    rank        = models.IntegerField(null=False)
    dateCreated = models.DateField(auto_now_add=True)

    def __str__(self):
        return '#' + self.keyword

class Article(models.Model):
    CATEGORY = (
        ('programming', 'programming'),
        ('language', 'language'),
        ('other', 'other')
    )

    title       = models.CharField(max_length=200, null=False)
    image       = models.ImageField(null=True)
    content     = models.TextField(null=False)
    category    = models.CharField(max_length=45, null=False, choices=CATEGORY)
    dateCreated = models.DateField(auto_now_add=True)
    keyword     = models.ManyToManyField(Keyword)

    def __str__(self):
        return self.title

и в файле views.py:

def articles(request):
    article = Article.objects.all()
    keyword = Keyword.objects.all()
    context = {
        'keyword': keyword,
        'article': article
    }
    return render(request, 'articles.html', context)

и в html-файле:

{% for item in article %}
<tr>
    <th scope="row">{{item.id}}</th>
    <td>{{item.title}}</td>
    <td>{{item.image}}</td>
    <td>{{item.content}}</td>
    <td>{{item.category}}</td>
    {% for key in item.keyword.all %}
    <td>{{key}}</td> 
    {% endfor %}
</tr>
{% endfor %}

Но в разделе ключевых слов в html-выводе ничего не отображается. что мне делать?

{% for item in article %}
  <tr>
    <th scope="row">{{item.id}}</th>
    <td>{{item.title}}</td>
    <td>{{item.image}}</td>
    <td>{{item.content}}</td>
    <td>{{item.category}}</td>
    <td> 
         {% for key in article.keyword.all %}
          {{key}}
         {% endfor %}   
    </td>       
  </tr>
{% endfor %}

попробуйте это

вы должны передать связанное имя в вашей модели

class Article(models.Model):
    CATEGORY = (
        ('programming', 'programming'),
        ('language', 'language'),
        ('other', 'other')
    )

    title       = models.CharField(max_length=200, null=False)
    image       = models.ImageField(null=True)
    content     = models.TextField(null=False)
    category    = models.CharField(max_length=45, null=False, choices=CATEGORY)
    dateCreated = models.DateField(auto_now_add=True)
    keyword     = models.ManyToManyField(Keyword, related_name='keyword')

    def __str__(self):
        return self.title 
Вернуться на верх