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?是的,发布!”!