Python 如何在不使用深度的情况下在子序列化程序中获取父模型?
我是django新手,我尝试过实践django rest api实现 型号.pyPython 如何在不使用深度的情况下在子序列化程序中获取父模型?,python,django,Python,Django,我是django新手,我尝试过实践django rest api实现 型号.py from django.db import models class Parentmodel(models.Model): ptid = models.IntegerField(primary_key=True) ptname = models.CharField(default="",max_length=50) def __str__(self):
from django.db import models
class Parentmodel(models.Model):
ptid = models.IntegerField(primary_key=True)
ptname = models.CharField(default="",max_length=50)
def __str__(self):
return self.ptname
class Studentmodel(models.Model):
stid = models.IntegerField(primary_key=True)
stname = models.CharField(max_length=50)
ptid=models.ForeignKey(Parentmodel,db_column='ptid', related_name="student", on_delete=models.CASCADE)
def __str__(self):
return self.stname
class Marksmodel(models.Model):
Marksid=models.IntegerField(primary_key=True)
maths=models.IntegerField()
physics=models.IntegerField()
science=models.IntegerField()
stid=models.ForeignKey(Studentmodel,db_column='stid', related_name="marks", on_delete=models.CASCADE)
def __str__(self):
return self.Marksid
from rest_framework import serializers
from polls.models import Studentmodel, Marksmodel, Parentmodel
class MarksSerializer(serializers.ModelSerializer):
class Meta:
model=Marksmodel
fields="__all__"
class StudentSerializer(serializers.ModelSerializer):
marks=MarksSerializer(read_only=True,many=True)
class Meta:
model=Studentmodel
fields="__all__"
class ParentSerializer(serializers.ModelSerializer):
student=StudentSerializer(read_only=True,many=True)
class Meta:
model=Parentmodel
fields="__all__"
from rest_framework import viewsets
from .serializers import StudentSerializer, MarksSerializer, ParentSerializer
from .models import Studentmodel, Marksmodel, Parentmodel
class Studentapi(viewsets.ModelViewSet):
queryset = Studentmodel.objects.all()
serializer_class = StudentSerializer
class Marksapi(viewsets.ModelViewSet):
queryset = Marksmodel.objects.all()
serializer_class = MarksSerializer
class Parentapi(viewsets.ModelViewSet):
queryset = Parentmodel.objects.all()
serializer_class = ParentSerializer
序列化程序.py
from django.db import models
class Parentmodel(models.Model):
ptid = models.IntegerField(primary_key=True)
ptname = models.CharField(default="",max_length=50)
def __str__(self):
return self.ptname
class Studentmodel(models.Model):
stid = models.IntegerField(primary_key=True)
stname = models.CharField(max_length=50)
ptid=models.ForeignKey(Parentmodel,db_column='ptid', related_name="student", on_delete=models.CASCADE)
def __str__(self):
return self.stname
class Marksmodel(models.Model):
Marksid=models.IntegerField(primary_key=True)
maths=models.IntegerField()
physics=models.IntegerField()
science=models.IntegerField()
stid=models.ForeignKey(Studentmodel,db_column='stid', related_name="marks", on_delete=models.CASCADE)
def __str__(self):
return self.Marksid
from rest_framework import serializers
from polls.models import Studentmodel, Marksmodel, Parentmodel
class MarksSerializer(serializers.ModelSerializer):
class Meta:
model=Marksmodel
fields="__all__"
class StudentSerializer(serializers.ModelSerializer):
marks=MarksSerializer(read_only=True,many=True)
class Meta:
model=Studentmodel
fields="__all__"
class ParentSerializer(serializers.ModelSerializer):
student=StudentSerializer(read_only=True,many=True)
class Meta:
model=Parentmodel
fields="__all__"
from rest_framework import viewsets
from .serializers import StudentSerializer, MarksSerializer, ParentSerializer
from .models import Studentmodel, Marksmodel, Parentmodel
class Studentapi(viewsets.ModelViewSet):
queryset = Studentmodel.objects.all()
serializer_class = StudentSerializer
class Marksapi(viewsets.ModelViewSet):
queryset = Marksmodel.objects.all()
serializer_class = MarksSerializer
class Parentapi(viewsets.ModelViewSet):
queryset = Parentmodel.objects.all()
serializer_class = ParentSerializer
视图.py
from django.db import models
class Parentmodel(models.Model):
ptid = models.IntegerField(primary_key=True)
ptname = models.CharField(default="",max_length=50)
def __str__(self):
return self.ptname
class Studentmodel(models.Model):
stid = models.IntegerField(primary_key=True)
stname = models.CharField(max_length=50)
ptid=models.ForeignKey(Parentmodel,db_column='ptid', related_name="student", on_delete=models.CASCADE)
def __str__(self):
return self.stname
class Marksmodel(models.Model):
Marksid=models.IntegerField(primary_key=True)
maths=models.IntegerField()
physics=models.IntegerField()
science=models.IntegerField()
stid=models.ForeignKey(Studentmodel,db_column='stid', related_name="marks", on_delete=models.CASCADE)
def __str__(self):
return self.Marksid
from rest_framework import serializers
from polls.models import Studentmodel, Marksmodel, Parentmodel
class MarksSerializer(serializers.ModelSerializer):
class Meta:
model=Marksmodel
fields="__all__"
class StudentSerializer(serializers.ModelSerializer):
marks=MarksSerializer(read_only=True,many=True)
class Meta:
model=Studentmodel
fields="__all__"
class ParentSerializer(serializers.ModelSerializer):
student=StudentSerializer(read_only=True,many=True)
class Meta:
model=Parentmodel
fields="__all__"
from rest_framework import viewsets
from .serializers import StudentSerializer, MarksSerializer, ParentSerializer
from .models import Studentmodel, Marksmodel, Parentmodel
class Studentapi(viewsets.ModelViewSet):
queryset = Studentmodel.objects.all()
serializer_class = StudentSerializer
class Marksapi(viewsets.ModelViewSet):
queryset = Marksmodel.objects.all()
serializer_class = MarksSerializer
class Parentapi(viewsets.ModelViewSet):
queryset = Parentmodel.objects.all()
serializer_class = ParentSerializer
以上代码运行良好。如果调用父api,我能够得到正确的响应
Parentapi响应:
[
{
"ptid": 1,
"student": [
{
"stid": 1,
"marks": [
{
"Marksid": 1,
"maths": 100,
"physics": 100,
"science": 123,
"stid": 1
}
],
"stname": "Nainika",
"ptid": 1
}
],
"ptname": "Sabish"
}
]
[
{
"stid": 1,
"marks": [
{
"Marksid": 1,
"maths": 100,
"physics": 100,
"science": 123,
"stid": 1
}
],
"stname": "Nainika",
"ptid": 1
}
]
学生回答:
[
{
"ptid": 1,
"student": [
{
"stid": 1,
"marks": [
{
"Marksid": 1,
"maths": 100,
"physics": 100,
"science": 123,
"stid": 1
}
],
"stname": "Nainika",
"ptid": 1
}
],
"ptname": "Sabish"
}
]
[
{
"stid": 1,
"marks": [
{
"Marksid": 1,
"maths": 100,
"physics": 100,
"science": 123,
"stid": 1
}
],
"stname": "Nainika",
"ptid": 1
}
]
我的问题是如何在学生api中获取父数据?您只需要做一些类似于您已经做过的事情(
marks=MarksSerializer(…)
),通过在学生模型中添加父模型的序列化器作为字段。我不明白。你能添加示例代码吗?我不明白你为什么不明白。查看您的代码,您已经在使用嵌套序列化程序。在我看来,给出你已经拥有的示例代码似乎很奇怪。无论如何,请参阅此处的文档