所以我做了一些搜索,但无法找到我特定问题的答案......发生的事情是:
我有一个名为section的模型,它有section_title字段。该字段可以包含空格,例如:"第一部分"。
当我将它传递给Django时,我使用replace()删除Python中的空格,并在Django上创建了一个过滤器,它也删除了这样的空格:
@register.filter(name='replace_char')
def replace_char(value, arg):
return value.replace(arg, '')
然后在我的模板上:
{% for subsection in section.section_title|replace_char:" " %}
问题是子节显示为section_title中的每个字符,而不是section_title引用的列表。这是传递给模板的字典:
{'部分':[<部分:第一部分>,<部分:第二部分>],' FirstSection':[<小节:小节1>,<小节:第2小节>],' SecondSection':[<小节:Bla1>],' teste':[' 1',' 2',' 3']}
如果我硬编码:
{% for subsection in FirstSection %}
它有效......
有什么想法吗?谢谢!
OBS:我删除了空格,因为我认为它们导致了问题,但显然没有。它也没有与空间合作......
完整的模板代码:
{% for section in sections %}
<div class="sectionHeader">
{{ section.section_title }}
</div>
<div class="forumSection">
{% for subsection in section.section_title|replace_char:" " %}
<div>
{{ subsection }}
</div>
{% endfor %}
</div>
{% endfor %}
型号:
class Section(models.Model):
def __str__(self):
return self.section_title
section_title = models.CharField(primary_key = True, unique = True, max_length = 50)
class Subsection(models.Model):
def __str__(self):
return self.subsection_title
subsection_title = models.CharField(max_length = 50)
subsection_section = models.ForeignKey(
'Section',
on_delete = models.CASCADE,
)
答案 0 :(得分:1)
您想在外键上设置related_name,以便您可以获取与该部分对应的所有子部分。
class Section(models.Model):
section_title = models.CharField(primary_key = True, unique = True, max_length = 50)
class Subsection(models.Model):
subsection_title = models.CharField(max_length = 50)
subsection_section = models.ForeignKey(
'Section',
related_name = 'subsections',
on_delete = models.CASCADE,
)
然后您可以更改模板代码以循环遍历子部分,如下所示:
{% for section in sections %}
<div class="sectionHeader">
{{ section.section_title }}
</div>
<div class="forumSection">
<div>
{% for subsection in section.subsections.all %}
{{ subsection.subsection_title }}
{% endfor %}
</div>
</div>
{% endfor %}
有关详细信息,请参阅https://docs.djangoproject.com/en/1.11/topics/db/queries/#related-objects。