Python 查询以获取Django中特定格式的数据

Python 查询以获取Django中特定格式的数据,python,django,python-3.x,django-rest-framework,django-views,Python,Django,Python 3.x,Django Rest Framework,Django Views,我的模型: class Student(models.Model): name = models.CharField(max_length=100) email = models.CharField(max_length=100, unique=True) password = models.CharField(max_length=25) class Subject(models.Model): name = models.CharField(max_len

我的模型:

class Student(models.Model):
    name = models.CharField(max_length=100)
    email = models.CharField(max_length=100, unique=True)
    password = models.CharField(max_length=25)


class Subject(models.Model):
    name = models.CharField(max_length=100)


class Student_subject_mapping(models.Model):
    student = models.ForeignKey(Student, on_delete=models.CASCADE)
    subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
我正在尝试以以下格式获取数据库中的所有
Student\u subject\u mapping
数据:

通过以下方式获取数据的查询是什么? 如何实现上述格式的数据

我的看法是:

class Get_Students(APIView):

    def get(self, request):

        try:
            res = StudentSerializer(Student.objects.all(), many=True).data
            print({"results": res})
            return Response({"results": res}, status=status.HTTP_200_OK)
models.py

class Student(models.Model):
    name = models.CharField(max_length=100)
    email = models.CharField(max_length=100, unique=True)
    password = models.CharField(max_length=25)

class Subject(models.Model):
    name = models.CharField(max_length=100)


class Student_subject_mapping(models.Model):
    student = models.ForeignKey(Student, on_delete=models.CASCADE, related_name='subjects')
    subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
序列化程序.py


你的问题

subjects = StudentSerializer(Student.objects.all(), many=True).data


print(json.dump({"results" : subjects}))
此外,您不必为映射创建不同的表,您可以使用
模型

class Student(models.Model):
    name = models.CharField(max_length=100)
    email = models.CharField(max_length=100, unique=True)
    password = models.CharField(max_length=25)
    subjects = models.ManyToManyField(Subject)

class Subject(models.Model):
    name = models.CharField(max_length=100)
上述模型结构的序列化程序

class SubjectSerializer(serializers.ModelSerializer):
    class Meta:
        model = Subject
        fields = ['id', 'name']

class StudentSerializer(serializers.ModelSerializer):
    subjects = serializers.SerializerMethodField()

    def get_subjects(self, obj):
        return SubjectSerializer(obj.subjects.all(), many=True).data

    class Meta:
        model = Student
        fields = ['id', 'email', 'subjects']
models.py

class Student(models.Model):
    name = models.CharField(max_length=100)
    email = models.CharField(max_length=100, unique=True)
    password = models.CharField(max_length=25)

class Subject(models.Model):
    name = models.CharField(max_length=100)


class Student_subject_mapping(models.Model):
    student = models.ForeignKey(Student, on_delete=models.CASCADE, related_name='subjects')
    subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
序列化程序.py


你的问题

subjects = StudentSerializer(Student.objects.all(), many=True).data


print(json.dump({"results" : subjects}))
此外,您不必为映射创建不同的表,您可以使用
模型

class Student(models.Model):
    name = models.CharField(max_length=100)
    email = models.CharField(max_length=100, unique=True)
    password = models.CharField(max_length=25)
    subjects = models.ManyToManyField(Subject)

class Subject(models.Model):
    name = models.CharField(max_length=100)
上述模型结构的序列化程序

class SubjectSerializer(serializers.ModelSerializer):
    class Meta:
        model = Subject
        fields = ['id', 'name']

class StudentSerializer(serializers.ModelSerializer):
    subjects = serializers.SerializerMethodField()

    def get_subjects(self, obj):
        return SubjectSerializer(obj.subjects.all(), many=True).data

    class Meta:
        model = Student
        fields = ['id', 'email', 'subjects']

嗨,吉特,谢谢你的回复,但我收到了“学生连载器”(@Zodiac my bad.I忘记编写
.data
来获取序列化数据。我已经更新了我的答案,现在应该可以了。立即尝试!不@Jeet我遇到一个错误:在尝试获取序列化程序
主题序列化程序
上的字段
名称
的值时,获取了AttributeError\n序列化程序字段的名称可能不正确且不匹配
Student\u subject\u mapping
实例上的任何属性或键。\n原始异常文本是:“Student\u subject\u mapping”对象没有属性“name”。“你能发布你的视图吗。py?是的,发布!嗨,Jeet,谢谢你的回复,但我收到了”StudentSerializer“(@Zodiac my bad.I忘记编写
.data
来获取序列化数据。我已经更新了我的答案,现在应该可以了。立即尝试!不@Jeet我遇到一个错误:在尝试获取序列化程序
主题序列化程序
上的字段
名称
的值时,获取了AttributeError\n序列化程序字段的名称可能不正确且不匹配
Student\u subject\u mapping
实例上的任何属性或键。\n原始异常文本是:“Student\u subject\u mapping”对象没有属性“name”。“您可以发布视图吗。py?是的,发布!”!