Django - 如何访问prefetch_related字段?

时间:2018-05-09 17:20:04

标签: django

students = Student.objects.prefetch_related('user__applications').all()

students.user__applications # Error

因此,学生拥有与应用程序列表相关联的User对象的外键。但是如何从Student对象访问应用程序列表?

2 个答案:

答案 0 :(得分:1)

prefetch_relatedselect_related都不会改变您访问相关数据的方式;你通过字段或反向关系来做,就像你没有使用这些方法一样。

在这种情况下,您有一个由学生组成的查询集;其中每个属性都有user属性,该属性为User对象提供了一个applications字段,该字段提供了另一个查询集。所以,例如:

students[0].user.applications.all()[0]

答案 1 :(得分:0)

您需要在val instructionPress = resources?.getString(R.string.settings_press) val okText = resources?.getString(R.string.ok) val spannableString = SpannableString(okText) val spannableBuilder = SpannableStringBuilder() spannableBuilder.append(instructionPress) spannableBuilder.append(spannableString, StyleSpan(Typeface.BOLD), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) instructionText.setText(spannableBuilder,TextView.BufferType.SPANNABLE) 模型的related_name字段中设置ForeignKey属性才能从Application模型中调用它。例如:

Student

然后你可以从你的学生模型中调用它:

class Student(models.Model):
    email = models.CharField(max_length=100, unique=True)
    created = models.DateTimeField(auto_now_add=True)

class Application(models.Model):
    student = models.ForeignKey(Student,related_name="applications", on_delete=models.CASCADE)
    """other fields"""

您将拥有学生名单。因此,您需要访问每个学生对象,然后您可以访问该特定学生的应用程序,如下所示:

students = Student.objects.all().prefetch_related('applications')