我想提供两种不同的序列化器,但能够从以下所有设施中受益ModelViewSet:
__unicode __目标模型显示每个其他关系;例:
{
"url": "http://127.0.0.1:8000/database/gruppi/2/",
"nome": "universitari",
"descrizione": "unitn!",
"creatore": "emilio",
"accesso": "CHI",
"membri": [
"emilio",
"michele",
"luisa",
"ivan",
"saverio"
]
}
Run Code Online (Sandbox Code Playgroud)
HyperlinkedModelSerializer例:
{
"url": "http://127.0.0.1:8000/database/gruppi/2/",
"nome": "universitari",
"descrizione": "unitn!",
"creatore": "http://127.0.0.1:8000/database/utenti/3/",
"accesso": "CHI",
"membri": [
"http://127.0.0.1:8000/database/utenti/3/",
"http://127.0.0.1:8000/database/utenti/4/",
"http://127.0.0.1:8000/database/utenti/5/",
"http://127.0.0.1:8000/database/utenti/6/",
"http://127.0.0.1:8000/database/utenti/7/"
]
}
Run Code Online (Sandbox Code Playgroud)
我设法按照以下方式完成所有这些工作:
serializers.py
# serializer to use when showing a list
class ListaGruppi(serializers.HyperlinkedModelSerializer):
membri = serializers.RelatedField(many = True)
creatore = serializers.RelatedField(many = False)
class Meta:
model = models.Gruppi
# serializer …Run Code Online (Sandbox Code Playgroud) 这是我的views.py:
class ChoicesViewSet(viewsets.ModelViewSet):
queryset = SingleChoice.objects.all()
serializer_class = SingleChoiceSerializer
...
class AssessmentTakersViewSet(viewsets.ModelViewSet):
queryset = AssessmentTaker.objects.all()
serializer_class = AssessmentTakersSerializer
...
@api_view(['POST'])
@parser_classes((JSONParser,))
def studio_create_view(request, format=None):
""""
A view that accept POST request with JSON content and in turn build out the
questions and choices. Post with application/json type.
"""
...
Run Code Online (Sandbox Code Playgroud)
这是我的urls.py:
urlpatterns = [
# http://localhost:8000/survey/api/studio-create
path('api/studio-create', views.studio_create_view, name='studio-create-api'),
]
# drf config
router = routers.DefaultRouter()
router.register('api/choices', views.ChoicesViewSet)
router.register('api/assessment-takers', views.AssessmentTakersViewSet)
urlpatterns += router.urls
Run Code Online (Sandbox Code Playgroud)
这在功能上有效,并且被认为是功能完整的,但由于studio-create_view未在路由器中注册,因此该路径不会显示在 API …