【问题标题】:How to get a list of existing student names in Django?如何在 Django 中获取现有学生姓名的列表?
【发布时间】:2021-11-18 16:31:21
【问题描述】:

我是 Django REST 框架的新手,我想获取一个列表 学生的名字(仅)存在时。谁能帮帮我?

在我的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

【问题讨论】:

  • 所以你必须写一个视图,它会返回学生。
  • 您想要所有学生,还是只想要一个学生(如果有的话)?
  • 我只想在下拉列表中显示已注册学生的名字。

标签: django django-models django-rest-framework django-views


【解决方案1】:

您可以尝试使用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

【讨论】:

    【解决方案2】:

    尝试在您的 views.py 中添加学生视图,然后使用 values() 方法

    class StudentViewSet(viewsets.ModelViewSet):
        serializer_class = StudentSerializer
        queryset = Student.objects.values('first_name')
    

    【讨论】:

      【解决方案3】:

      根据您在 first_name 模型字段上定义的内容,即 null=False,blank=False。这意味着该字段不能为空。

      first_name = models.CharField(max_length=100, null=False, blank=False)
      

      这意味着您的所有模型调用将始终需要 first_name

      同时,如果您仍想确保您的查询返回带有 first_name 的项目,请执行此操作

      queryset = School.objects.exclude(student__first_name=None) 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多