cha*_*dgh 9 django django-rest-framework
我有两个序列化程序,一个用于讲师,一个用于课程.教师序列化程序与课程有明确的关系,如下所示:
courses = CourseSerializer(many=True, read_only=True)
如何在讲师序列化程序中指定课程的顺序?
注意:我已经ordering在Course Meta类中定义了值,但它是我想要的其他地方的默认排序.我想要的是api输出的自定义排序(特别是dept,number,-semester而不是默认的-semester).
小智 16
由于它是只读的,对于那个字段使用序列化方法是不是很容易?
class InstructorSerializer(serializers.ModelSerializer):
courses = serializers.SerializerMethodField()
def get_courses(self, obj):
ordered_queryset = <do your magic here>
return CourseSerializer(ordered_queryset, many=True, context=self.context).data
Run Code Online (Sandbox Code Playgroud)
End*_*oth 11
从 Django 1.7 开始,您可以为prefetch_related. 使用预取只会产生一个额外的数据库查询,而不是每个带有SerializerMethodField.
from rest_framework import viewsets
from django.db.models import Prefetch
class InstructorViewSet(viewsets.ModelViewSet):
queryset = Instructor.objects.prefetch_related(Prefetch(
'courses',
queryset=Course.objects.order_by('dept', 'number')))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5008 次 |
| 最近记录: |