【问题标题】:django: how to display ManyToManyField in html file?django:如何在 html 文件中显示 ManyToManyField?
【发布时间】:2021-08-22 16:24:51
【问题描述】:

我想在 Django 的 html 页面中显示 ManyToManyField。

这段代码在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 输出的关键字部分没有显示任何内容。我该怎么办?

【问题讨论】:

标签: python django


【解决方案1】:
{% 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 %}

【讨论】:

  • 谢谢,但没有效果!
  • 请确保您的文章中有关键字。
【解决方案2】:

试试这个

你必须在你的模型上传递一个相关的名字

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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-20
    • 2019-08-07
    • 2014-11-22
    • 1970-01-01
    • 2019-07-26
    • 2013-09-22
    • 2018-12-21
    相关资源
    最近更新 更多