如何查询以便显示模型的字段而不是实际模型

How to query so that a field of a model will show up instead of the actual model

我正在尝试查询,以便每个模型实例中的字段值都不会重复显示。所有这一切都发生在表格中:

class OrganisorClassStatusUpdateForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(OrganisorClassStatusUpdateForm, self).__init__(*args, **kwargs)
        self.fields['off_day_student'] = forms.ModelChoiceField(
            queryset= Class.objects.filter(teacher=self.instance.teacher).filter(is_new_set=True).filter(time=self.instance.time).order_by('-date')[:10]
        )

此处,self.instance 指的是我正在使用此表单更新的 Class 模型实例。但是,使用此代码,我会收到一个表单字段的 Class 实例列表。我想要的是一个 Student 的列表,对应于表单字段中的每个 Class 个实例(每个 class 只有一个学生)。因此,我想要 Student1、Student2、Student3,而不是 Class1、Class2、Class3。此外,如果学生姓名有任何重复,我想只显示一个。希望同学们如上代码所示,classes也按照-date的顺序列出。请问我任何问题。非常感谢。

这里是 Class 一些人问过的模型:

class Class(models.Model):
    teacher = models.ForeignKey('Agent', null=True, blank=True, on_delete=models.SET_NULL)
    student = models.ForeignKey('Lead', null=True, blank=True, on_delete=models.SET_NULL, related_name='student')

在这种情况下,请尝试从 Lead/Student 生成查询集,并针对 related_name:

使用现有的 Class 过滤器
queryset = Lead.objects.filter(
    student__in=Class.objects.filter(
        teacher=self.instance.teacher,
        is_new_set=True,
        time=self.instance.time,
    )[:10]
).order_by('-student__date')

如果您使用的是 Postgres,您可以使用您想要的字段名称调用 distinct,例如:.distinct('name')