python - DRF:如何使用视图集中的操作装饰设置正确的 view_name
问题描述
我有下一个动作装饰器方法,我假装在模型上过滤老师:
@action(detail=True, methods=(['GET']))
def get_teachers_by_area(self, request, pk=None):
teachers = self.get_serializer().Meta.model.objects.get_teachers_by_area(pk=pk)
if teachers:
teacher_serializer = TeacherByAreaListSerializer(teachers, many=True)
return Response(
{
'ok': True,
'conon_data': teacher_serializer.data
},
status=status.HTTP_200_OK
)
else:
return Response(
{
'ok': False,
'detail': 'No se encontró el Área de Conocimiento.'
},
status=status.HTTP_400_BAD_REQUEST
)
接下来是网址的文件:
路由器.py
router = routers.DefaultRouter()
router.register(
r'school-period',
SchoolPeriodViewSet,
basename='school_period'
)
router.register(
r'knowledge-area',
KnowledgeAreaViewSet,
basename='knowledge_area')
urlpatterns = router.urls
网址.py
path('user/api/', include('applications.users.routers')),
path('school/api/', include('applications.school.routers')),
接下来是模型的 Serializers.py:
class KnowledgeAreaSerializer(serializers.HyperlinkedModelSerializer):
teachers = serializers.HyperlinkedRelatedField(
view_name='knowledge_area-detail',
read_only=True,
)
我只是假装用前面提到的动作装饰器像 url 一样返回数据(教师):
def to_representation(self, instance):
data = super().to_representation(instance)
return {
'id': instance.id,
'name': instance.name,
'coordinator': {
'id': instance.coordinator.person.id,
'name': instance.coordinator.person.full_name()
},
'sub_coordinator': {
'id': instance.sub_coordinator.person.id,
'name': instance.sub_coordinator.person.full_name()
},
'objective': instance.objective,
'observations': instance.observations,
'teachers': instance.teachers,
'created_at': instance.created_at
}
但问题是我无法指出动作方法的正确 URL,我做了很多研究,但没有找到任何关于它或具有相同要求的东西。谢谢你顺便帮我。
解决方案
推荐阅读
- java - 网络连接不工作
- android - 如何设置环境变量 GOOGLE_APPLICATION_CREDENTIALS?
- javascript - 在 html 的测验网站中一次显示一个问题
- r - 按顺序计数字符,忽略给定字符 (R)
- c# - 从 ObservableConcurrentCollection 中删除项目
- java - 如何将 JSF InputText 值传递给 ajax 监听器
- visual-studio - 如何从 Windows 7 机器在 Visual Studio 2015 上安装和使用构建工具 v120 (2013)?
- django - Django 2 - 未找到视图的反向
- cordova - 如何通过 API 从 Cordova 上的移动应用程序从 Google Cloud Platform 获取数据?
- python - Python - 从图表和图例中删除边框