【问题标题】:Showing one-to-many relationship in Django views在 Django 视图中显示一对多关系
【发布时间】:2014-02-23 00:41:33
【问题描述】:

我正在制作一个 django 博客,并希望为每篇博客文章显示一个 cmets 列表,但我无法弄清楚如何在视图和模板中引用 cmets。 我的模型是这样定义的:

class Issue(models.Model):
    title = models.CharField(max_length=255)
    text = models.TextField()
    author = models.ForeignKey(User)

    def __unicode__(self):
        return self.title

class Comment(models.Model):
    commenter = models.ForeignKey(User)
    issue = models.ForeignKey(Issue)
    text = models.TextField()

我的观点是这样的

class IssueDetail(DetailView):
    model = Issue
    context_object_name = "issue"
    template_name = "issue_detail.html"

    def get_context_data(self, **kwargs):
        context = super(IssueDetail, self).get_context_data(**kwargs)
        context['comments'] = Comment.objects.all()
        return context

class CommentDetail(DetailView):
    model = Comment
    context_object_name = "comment"
    template_name = "comment_detail.html"

最后是 issue_detail.html 模板

{% block content %}
  <h2>{{ issue.title }}</h2>
        <br/>
        <i>As written by {{ issue.author.first_name }}</i>
        <br/><br/>
        <blockquote> {{ issue.text }}</blockquote>
        <h3>Comments</h3>
        {% for comment in comments %}
            <li>{{comment}}</li>
        {% endfor %}
{% endblock %}

这允许我引用问题模板中的注释字段,但基本上我希望 cmets 拥有自己的模板,该模板将在 for 循环中呈现。在 Django 中执行此操作的正确方法是什么?

【问题讨论】:

    标签: python django


    【解决方案1】:

    由于您定义的模型关系,comments 已在您的模板中可用。可以删除IssueDetail中的get_context_data

    您的issue_detail.html 模板可能如下所示:

    {% for comment in issue.comment_set.all %}
      {% include 'comment_detail.html' %}    
    {% endfor %}
    

    您的comment_detail.html 模板可能如下所示:

    <ul>
        <li>{{ comment.issue }}</li>
        <li>{{ comment.text }}</li>
    </ul>
    

    【讨论】:

    • 我喜欢 stackoverflow 上的现成解决方案,它比阅读 django 的文档要好
    【解决方案2】:

    如果我们使用不同的模型会怎样

    product = models.ForeignKey(Customer)
    

    我们将如何从模板和 views.py 中执行 CRUD 操作

    【讨论】:

    • 如果您有新问题,请点击 按钮提出问题。如果有助于提供上下文,请包含指向此问题的链接。 - From Review
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 2021-11-13
    • 1970-01-01
    • 2018-08-12
    • 2019-04-11
    • 1970-01-01
    相关资源
    最近更新 更多