【问题标题】:select_related and prefetch_related - not getting results in queryselect_related 和 prefetch_related - 在查询中没有得到结果
【发布时间】:2018-03-01 11:46:16
【问题描述】:

我正在尝试制作简单的学习项目,我可以在其中获取所有记录并在 html 上显示。 我的模型是:

class Student(models.Model):
 stuName = models.CharField(max_length=100)
 stuCity = models.CharField(max_length=100)
 stuPhone = models.IntegerField(max_length=10)
 stuNationality = models.CharField(max_length=50)
 stuCreatedt = models.DateTimeField(default=timezone.now)
 def __str__(self):
     return '%s %s %s' % (self.stuName,self.stuCity,self.stuNationality)


class Dept(models.Model):
 deptId = models.AutoField(primary_key=True)
 deptName = models.CharField(max_length=100)
 def __str__(self):
      return '%s %s' % (self.deptId, self.deptName)




class Course(models.Model):
 courseId = models.AutoField(primary_key=True)
 courseName = models.CharField(max_length=100)
 enrolledStu = models.IntegerField(max_length=3)
 students = models.ManyToManyField(Student)
 dept = models.ForeignKey(Dept, on_delete=models.CASCADE)
 def __str__(self):
      return '%s %s %s %s' % (self.courseName,self.enrolledStu,self.students,self.dept)

从这个模型中,我尝试使用以下查询显示学生、课程和部门信息:

course = Course.objects.all().prefetch_related('students').select_related('dept')

我的 html 代码是:

{% for c in course %}
    <tr>
        <td>{{c.students.stuName}}</td>
        <td>{{c.students.stuCity}}</td>
        <td>{{c.dept.deptName}}</td>
        <td>{{c.courseName}}</td>
        <td><a href="#">Edit</a> </td>
    </tr>
{% endfor %}

我无法显示学生信息。谁能帮我纠正我的错误。我假设我的查询不正确。

约旦

【问题讨论】:

  • 你能展示一下你在course得到了什么吗?

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


【解决方案1】:

由于students 是多对多字段并包含您需要遍历students.all 以获取学生信息的学生列表:

{% for c in course %}
    <tr>
        {% for student in c.students.all %} 
            <td>{{student.stuName}}</td>
            <td>{{student.stuCity}}</td>
        {% endfor %} 
        <td>{{c.dept.deptName}}</td>
        <td>{{c.courseName}}</td>
        <td><a href="#">Edit</a> </td>
    </tr>
{% endfor %}

【讨论】:

    【解决方案2】:

    对于每门课程,您可以显示有关课程的独特详细信息,然后在下表中显示已注册的学生...

    {% for c in course %}
        <p>{{c.dept.deptName}}</p>
        <p>{{c.courseName}}</p>
        <p><a href="#">Edit</a> </p>
    
        {% for s in c.students.all %}
        <tr> 
            <td>{{s.stuName}}</td>
            <td>{{s.stuCity}}</td>
        </tr>
        {% endfor %}
    {% endfor %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-12
      • 2023-03-30
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      相关资源
      最近更新 更多