【问题标题】:Django ManyToMany query with listening in template在模板中侦听的 Django ManyToMany 查询
【发布时间】:2020-05-26 15:22:40
【问题描述】:

我正在努力处理多对多关系。我想要做的是让所有应用程序及其对应的服务器(一个应用程序可以存在于一个以上的服务器上)并在模板中列出它们。到目前为止,我知道如何使用“prefetch_related”查询服务器并在模板中打印它们,但是如何使用相应的服务器查询所有应用程序并在模板中打印它们?

示例模板:

'Some www application','www server','database server for www server'...

提前谢谢你。

class Server(models.Model):
    title=models.CharField(max_length=40,unique=True)

class Application(models.Model):
    name = models.CharField(max_length=40,primary_key=True,unique=True)
    book = models.ManyToManyField(Server)

【问题讨论】:

    标签: django django-templates many-to-many


    【解决方案1】:

    您还可以在查询Applications 时使用prefetch_related

    def some_view(request):
        applications = Application.objects.prefetch_related('book')
        return render(request, 'some_template.html', {'applications': applications})

    然后你可以在模板中渲染它:

    {% for application in applications %}
        <b>application.name</b> {% for server in application.book.all %}{{ server.title }}{% endfor %}
    {% endfor %}

    【讨论】:

    • 不知道为什么,但仍然无法获取与应用程序相关的服务器列表。不应该有类似于“q=Application.objects.all().prefetch_related('book_set')”的东西,然后在模板“{% for app in application.book_set.all %}” - 我不确定但是以其他方式查询对我和在模板中一样有效?
    • @admfotad,没有,因为您将关系命名为 book = ...,但也许您混淆了太多?
    • 我的班级有点大,我想以更简单的方式展示它 - 这就是书籍出现的原因:P
    猜你喜欢
    • 1970-01-01
    • 2012-01-16
    • 2011-06-22
    • 2015-06-23
    • 1970-01-01
    • 2023-03-19
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多