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