Django:如何强制模板中的循环只显示一次字段

时间:2017-09-07 09:39:30

标签: python django

我正试图强制模型中的' name '字段在django模板的for循环中只显示一次。

这是我的模特:

class add_engineering_course(models.Model):
    name = models.CharField(max_length=50, default='Computer Engineering')

    def __str__(self):
        return self.name



class add_engineering_course_information(models.Model):
    name = models.ForeignKey(add_engineering_course)
    university = models.ForeignKey(engineeringUni)
    campus = models.CharField(max_length=20, default='Campus')
    fees = models.IntegerField()

    def __str__(self):
        return self.name.name

    def university_a(self):
        return self.university

    def campus_a(self):
        return self.campus

    def fees_a(self):
        return str(self.fees)

我的观点:

def abc_list(request):
    abc_listing = add_engineering_course_information.objects.order_by('id')
    return render(request, 'theproject/testing.html', {'abc_listing': abc_listing})

我的模板:

    {% for x in abc_listing %}
  {{ x.name }}<br>
  Unviserity: {{ x.university_a }}<br>
  Campus: {{ x.campus_a }}<br>
  Fees: {{ x.fees_a }}<br><br><br>

{% endfor %}

以上代码会生成this(图片)。

如图所示,名称x.name多次出现(取决于条目)。

示例:网络工程出现两次,因为其类别中添加了两所不同的大学。

我想要的是this(图片)。

x.name应该只出现一次,其余的东西(大学,校园,费用)应该正常显示(多次取决于有多少)。

1 个答案:

答案 0 :(得分:0)

要实现这一目标,您应该将类​​别定义为课程信息的单独模型。在模型之间创建多对一关系。然后,您可以继续使用两个for循环。在第一个(外部循环)中,迭代这组类别。在第二个(内部循环)中,迭代属于每个类别的一组课程。 Django documentation为模型之间的多对一关系提供了很好的演练。