【问题标题】:How to iterate through Django model items in a ManyToManyField如何遍历 ManyToManyField 中的 Django 模型项
【发布时间】:2021-04-20 23:06:11
【问题描述】:

刚接触 Django/Python,我想从构建一个简单的博客应用开始。我希望用户能够发布包含书名和该书链接的参考书目。

我的 models.py 中当前的 References 类如下所示:

class References(models.Model):
    link = models.URLField(max_length=150, default=False)
    title = models.CharField(max_length=100, default=False)

    def __str__(self):
        return self.title

而我的Post 类看起来像这样:

class Post(models.Model):
    title = models.CharField(max_length=31)
    content = models.TextField()
    thumbnail = models.ImageField()
    displayed_author = models.CharField(max_length=25, default=True)
    shortquote = models.TextField()
    reference_title = models.ManyToManyField(References)
    publish_date = models.DateTimeField(auto_now_add=True)
    last_updated = models.DateTimeField(auto_now=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    slug = models.SlugField()

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("detail", kwargs={
            'slug': self.slug
        })

    def get_love_url(self):
        return reverse("love", kwargs={
            'slug': self.slug
        })

    @property
    def comments(self):
        return self.comment_set.all()

    @property
    def get_comment_count(self):
        return self.comment_set.all().count()

    @property
    def get_view_count(self):
        return self.postview_set.all().count()

    @property
    def get_love_count(self):
        return self.love_set.all().count()

我知道我只在我的 References 类中返回 title,我尝试返回 self.title + self.link,但这在模板中被调用时给了我标题和链接。

我调用引用类的模板如下所示:

{% for title in post.reference_title.all  %}
        <a href="{{ link }}">
           <li>{{ title }}</li>
        </a>
{% endfor %}

我尝试了不同的组合,以使链接和标题独立呈现,如模板中所示,但问题在于知道如何通过ManyToManyField 显示类中的不同项目。对此的任何帮助都会很棒,因为我相信这只是我还没有学到的东西。提前致谢!

【问题讨论】:

    标签: python html django django-templates


    【解决方案1】:

    title 不是标题,它是一个References 对象,只是因为你实现了__str__ 来返回标题,所以{{ title }},确实会渲染@987654326 的.title 属性@对象。

    您因此对其进行迭代,并访问该属性:

    {% for reference in post.reference_title.all  %}
        <a href="{{ reference.link }}">
            <li>{{ reference }}</li>
        </a>
    {% endfor %}

    因此,您可以在此处将 {{ reference }} 替换为 {{ reference.title }},尽管两者是等价的,因为 __str__ 返回标题。

    【讨论】:

      猜你喜欢
      • 2018-06-14
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 2023-02-26
      • 1970-01-01
      • 2019-07-14
      • 2011-05-15
      • 1970-01-01
      相关资源
      最近更新 更多