【问题标题】:how reverse query ManytoMany DjangoDjango如何反向查询ManytoMany
【发布时间】:2016-05-21 14:05:25
【问题描述】:

我有这两个模型,我想在我的页面中显示具有特定任务的项目。这些是我的模型:

class Project (models.Model):
    name = models.CharField(verbose_name="Project name", max_length=25)
    tasks = models.ManyToManyField(Task, verbose_name="tasksInProject", blank=True,
                                   related_name="projects+")

class Task(models.Model):
    name = models.CharField(verbose_name="Task", max_length=50)

我称之为视图:

class TaskToProjectFilterView(DetailView):
    model = Task
    template_name = "vivs/task_filter.html"
    context_object_name = "task_filter"

这是我的 html 模板:

<h4>filter : {{ task_filter }} </h4>
<h4>projects : 
{% for element in task_filter.projects.all %}
    {{ element }} 
{% endfor %}
</h4>

此代码显示{{ task_filter }},但不显示{{ task_filter.projects.all }} 的列表。

你能帮帮我吗?我不明白我的错误。谢谢!

【问题讨论】:

  • 我认为'projects+' 中的'+'related_name 中是一个错字,否则它将完全解释为什么task_filter.projects.all 不起作用。
  • 非常感谢您的回答!现在可以使用了

标签: django reverse m2m


【解决方案1】:

正如schwobaseggl 所说,删除+ 标志,它应该可以按预期工作,使用:

{% for element in task_filter.projects.all %}

来自Django Docs

如果您不希望 Django 创建反向关系,请将 related_name 设置为 '+' 或以 '+' 结尾。例如,这将确保 User 模型不会与此模型有反向关系:

【讨论】:

  • 是的,这是我的错误,感谢您的解释!
猜你喜欢
  • 1970-01-01
  • 2018-09-25
  • 2012-03-10
  • 2015-06-23
  • 1970-01-01
  • 2019-02-24
  • 2015-09-11
  • 2020-09-24
  • 2020-07-18
相关资源
最近更新 更多