Как сделать запрос так, чтобы отображалось поле модели, а не сама модель

Я пытаюсь сделать запрос так, чтобы значение поля в каждом экземпляре модели отображалось без дубликатов. Все это происходит внутри формы:

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 экземпляру в поле формы (для каждого класса есть только один ученик). Поэтому вместо Class1, Class2, Class3 я хотел бы иметь Student1, Student2, Student3. Более того, если есть дубликаты имени ученика, я хотел бы показать только один. Я надеюсь, что студенты также перечислены в порядке -date для классов, как показано в приведенном выше коде. Пожалуйста, задавайте мне любые вопросы. Большое спасибо.

Вот модель класса, как некоторые из вас спрашивали:

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, и используйте существующий фильтр Class против related_name:

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')

Вернуться на верх