Как сделать запрос так, чтобы отображалось поле модели, а не сама модель
Я пытаюсь сделать запрос так, чтобы значение поля в каждом экземпляре модели отображалось без дубликатов. Все это происходит внутри формы:
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')