【发布时间】:2020-12-01 09:48:12
【问题描述】:
我遇到了嵌套序列化程序和 ViewSet 的问题
我的模型是这样的,他们的关系很清楚
这个类之间有嵌套关系
class Sim(models.Model):
name = models.CharField(max_length=255)
subject = models.ManyToManyField(Subject)
grade = models.ManyToManyField(Grade)
class Exercise(models.Model):
name = models.CharField(max_length=255)
sim = models.OneToOneField(Sim,related_name='sims', on_delete=models.CASCADE)
class Result(models.Model):
is_example = models.BooleanField(null=False)
exercise = models.ForeignKey(Exercise, on_delete=models.CASCADE, blank=True, null=True,
default=None)
class Parameter(models.Model):
name = models.CharField(max_length=255)
exercise = models.ForeignKey(Exercise, on_delete=models.CASCADE, blank=True, null=True,
default=None)
class ExerciseData(models.Model):
value = models.CharField(max_length=255)
parameter = models.ForeignKey(Parameter, on_delete=models.CASCADE, blank=True,
null=True, default=None)
result = models.ForeignKey(Result, on_delete=models.CASCADE, blank=True, null=True,
default=None)
我想构建一个这样的练习序列化器
class ExerciseSerializer(serializers.ModelSerializer):
parameters = ParameterSerializer(many=True, read_only=True)
exercisedatas = ExerciseDataSerializer(many=True, read_only=True)
sims = SimSerializer(many=True, read_only=True)
class Meta:
model = models.Exercise
fields = ['name', 'id', 'parameters', 'exercisedatas','sims']
extra_kwargs = {
'id': {'read_only': True},
}
class SimSerializer(serializers.ModelSerializer):
grade = GradeSerializer(many=True, read_only=True)
subject = SubjectSerializer(many=True, read_only=True)
class Meta:
model = models.Sim
fields = ['name', 'subject', 'grade', 'id']
extra_kwargs = {
'id': {'read_only': True},
}
class ParameterSerializer(serializers.ModelSerializer):
class Meta:
model = Parameter
fields = ['name', 'id']
extra_kwargs = {
'id': {'read_only': True},
}
class ResultSerializer(serializers.ModelSerializer):
class Meta:
model = Result
fields = ['is_example', 'id']
extra_kwargs = {
'id': {'read_only': True},
}
class ExerciseDataSerializer(serializers.ModelSerializer):
parameter_set = ParameterSerializer(many=True, read_only=True)
result_set = ResultSerializer(many=True, read_only=True)
class Meta:
model = ExerciseData
fields = ['value', 'id', 'parameter_set', 'result_set']
extra_kwargs = {
'id': {'read_only': True},
}
我的视图集是这样创建的:
class ExerciseViewset(viewsets.ModelViewSet):
serializer_class = serializers.ExerciseSerializer
pagination_class = StandardResultsSetPagination
queryset = models.Exercise.objects.all()
def filter_queryset(self, queryset):
queryset = self.get_queryset()
queryset = play_filtering_form(queryset, self.request.query_params)
return queryset
我没有收到想要的输出
输出
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"name": "تمرین",
"id": 1
}
]
}
我没有收到参数和exercisedatas和sims这三项
【问题讨论】:
-
我不是很明白你的问题,你是在尝试做所有的练习吗?
-
@Omar 是的,我正在尝试做所有的练习
标签: django django-models django-rest-framework django-serializer