Как получить список существующих имен студентов в Django?
Я новичок в Django rest framework, я хочу получить список фамилий студентов (только когда они существуют). фамилии студентов (только), когда они существуют. может ли кто-нибудь помочь мне?
В моем models.py
class School(models.Model):
name = models.CharField(max_length=100, null=False, blank=False)
city = models.CharField(max_length=100, null=False, blank=False)
street = models.CharField(max_length=100, null=False, blank=False)
def __str__(self):
return f"{self.city}->{self.street}->{self.name}"
class Student(models.Model):
school_id = models.ForeignKey(School, on_delete=models.CASCADE)
first_name = models.CharField(max_length=100, null=False, blank=False)
last_name = models.CharField(max_length=100, null=False, blank=False)
def __str__(self):
return f"{self.first_name} {self.last_name}"
В моем serializers.py
:
class StudentSerializer(serializers.Serializer):
class Meta:
model = Student
fields = ['first_name']
class SchoolSerializer(serializers.Serializer):
is_existing_student = = serializers.BooleanField()
student = StudentSerializer(many=True, read_only=True)
class Meta:
model = School
fields = ['is_existing_student','student']
В моем views.py
:
class schoolViewSet(viewsets.ModelViewSet):
serializer_class = SchoolSerializer
queryset = School.objects.all()
На этом рисунке вы можете увидеть, как это должно выглядеть [1]: https://i.stack.imgur.com/bR8cN.png
вы можете попробовать использовать метод values()
или values-list()
так что вы можете сделать что-то вроде
Student.objects.values_list('first_name')
или
Student.objects.values('first_name')
https://docs.djangoproject.com/en/3.2/ref/models/querysets/#values-list
попробуйте добавить представление студента в ваш views.py, затем используйте метод values()
class StudentViewSet(viewsets.ModelViewSet):
serializer_class = StudentSerializer
queryset = Student.objects.values('first_name')
Из того, что вы определили для поля модели first_name, т.е. null=False, blank=False. Это означает, что поле не может быть пустым.
first_name = models.CharField(max_length=100, null=False, blank=False)
Что означает, что все ваши вызовы моделей всегда будут иметь first_name required
Тем временем, если вы все еще хотите быть уверены, что ваш запрос возвращает элементы с именем first_name, сделайте следующее
queryset = School.objects.exclude(student__first_name=None)