【问题标题】:Django 2 distinct model field itemsDjango 2 个不同的模型字段项
【发布时间】:2019-02-05 16:27:57
【问题描述】:

我正在尝试获取模块字段中不同项目的列表,然后显示与该字段关联的所有项目。

例如,在学校管理系统中有一个学校模块和一个学生模型。每个学生都有一种与他们相关的颜色作为“颜色”字段。我想创建一个页面,该页面列出学校中所有不同的颜色,然后在每种颜色下列出属于该颜色的学生。

我会在视图中编写这个函数吗?

这是我目前在 views.py 中的内容:

class SchoolColorDetailView(DetailView):
    model=models.School
    template_name='school_app/school_color_detail.html'

    def get_context_data(self,**kwargs):
        context = super().get_context_data(**kwargs)
        context['colors']=Student.objects.all().order_by('color').distinct('color')

这将为我提供所有颜色的列表(但不是按学校)。有没有办法只按学校获得颜色,然后是所有与该颜色相关的学生?我必须为此创建字典吗?

任何帮助将不胜感激。

谢谢!

更新:

以下是模型:

class School(models.Model):
    name = models.CharField(max_length=256)
    principal = models.CharField(max_length=256)
    location = models.CharField(max_length=256)


    def __str__(self):
        return self.name

    def get_absolute_url(self):
    return reverse("school_app:school_detail",kwargs={'pk':self.pk})


class Student(models.Model):
    name = models.CharField(max_length=256)
    color = models.CharField(max_length=256)
    school = models.ForeignKey(School,related_name='students', on_delete="Protect")

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse("school_app:student_detail",kwargs={'pk':self.pk})

第二次更新:

我正在尝试制作一个看起来像这样的模板(不确定最好的方法):

{% for color in colors %}
 <ul>
   <li>{{color}}
     {% for student in color %}
     <ul>
       <li>{{student}}</li>
     </ul>
     {% endfor %}
   </li>
 </ul>
{% endfor %}

【问题讨论】:

  • 请发布您的模型。
  • 添加模型到帖子

标签: python django django-models django-views django-queryset


【解决方案1】:

改变

context['colors']=Student.objects.all(
       ).order_by('color').distinct('color')

context['colors']=self.student_set.all(
       ).order_by('color').distinct('color')

【讨论】:

  • 运行代码时出现此错误:SchoolColorDetailView 对象没有属性“student_set”我必须在某处设置此属性吗?
  • 哎呀,我的错你能给我一些你试图渲染的模板吗,我会修复我的代码以匹配它。
  • 我将要渲染的模板添加到问题的底部。感谢您的帮助!
猜你喜欢
  • 2019-02-22
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 2015-11-07
  • 1970-01-01
  • 2011-05-21
相关资源
最近更新 更多