Django URL中有多个pk [英] Django multiple pks in url
问题描述
我目前正在尝试使用Django Rest Framework构建API.目前,我希望能够在一个网址中包含多个pk,但是当我尝试时会出现错误:
I am currently trying to build an API using the Django Rest Framework. Currently I want to be able to have multiple pks in a single url, but when I try I get an error:
django.core.exceptions.ImproperlyConfiged:"^ video/(?P [0-9] +)/测验/(?P [0-9] +)/列表/$"无效正则表达式:将组名"pk"重新定义为组2;曾是第1组第31位
django.core.exceptions.ImproperlyConfigured: "^video/(?P[0-9]+)/quiz/(?P[0-9]+)/list/$" is not a valid regular expression: redefinition of group name 'pk' as group 2; was group 1 at position 31
这是我的网址:
url(r'^video/(?P<pk>[0-9]+)/quiz/(?P<pk>[0-9]+)/list/$',
views.QuizList.as_view(),
name='quizzes-list'),
url(r'^video/(?P<pk>[0-9]+)/quiz/(?P<pk>[0-9]+)/detail/$',
views.QuizDetail.as_view(),
name='quizzes-detail'),
我将对一个视频进行多次测验,并希望能够通过我网址中的某个pk到达这些测验.
I am going to have multiple quizzes for a video and want to be able to reach them through a certain pk in my url.
是否有一种简单的方法可以执行此操作,或者缺少正确的方法来执行此操作?
Is there a simple method to do this or am missing the proper way to do this?
谢谢
编辑*这是我的观点:
class VideoList(generics.ListCreateAPIView):
queryset = Video.objects.all()
serializer_class = VideoSerializer
class VideoDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Video.objects.all()
serializer_class = VideoSerializer
# quiz
class QuizList(generics.ListCreateAPIView):
queryset = Quizzes.objects.all()
serializer_class = QuizSerializer
class QuizDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Quizzes.objects.all()
serializer_class = QuizSerializer
更新的网址:
###
# Quiz urls
###
url(r'^video/(?P<pk1>[0-9]+)/quiz/(?P<pk2>[0-9]+)/list/$',
views.QuizList.as_view(),
name='quizzes-list'),
url(r'^video/(?P<pk1>[0-9]+)/quiz/(?P<pk2>[0-9]+)/detail/$',
views.QuizDetail.as_view(),
name='quizzes-detail'),
更新的视图:
class QuizList(generics.ListCreateAPIView):
queryset = Quizzes.objects.all()
serializer_class = QuizSerializer
def get(self, request, *args, **kwargs):
pk1 = kwargs.get('pk1', None)
pk2 = kwargs.get('pk2', None)
print(pk1)
print(pk2)
return self.list(request, *args, **kwargs)
新错误:
无法使用视图名称解析超链接关系的URL测验列表".您可能未能将相关模型包括在您的API,或错误地将
lookup_field
属性配置为此字段.
推荐答案
您必须为命名"捕获组指定一个唯一的名称.
You must give a unique name for the Named capturing group.
url(r'^video/(?P<pk1>[0-9]+)/quiz/(?P<pk2>[0-9]+)/list/$',
views.QuizList.as_view(),
name='quizzes-list'),
通过视图访问视图中相应的 pk *
值,
Access the corresponding pk*
values in the view through,
pk1 = kwargs.get('pk1', None)
pk2 = kwargs.get('pk2', None)
例如:
# quiz
class QuizList(generics.ListCreateAPIView):
queryset = Quizzes.objects.all()
serializer_class = QuizSerializer
def get(self, *args, **kwargs):
pk1 = kwargs.get('pk1', None)
pk2 = kwargs.get('pk2', None)
print pk1
print pk2
return super(QuizList, self).get(*args, **kwargs)
这篇关于Django URL中有多个pk的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!