2016-03-24 6 views
0

В настоящее время я пытаюсь создать API с помощью Django Rest Framework. В настоящее время я хочу, чтобы иметь возможность иметь несколько ПКС в одном URL, но когда я пытаюсь я получаю сообщение об ошибке:Django multiple pks in url

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

Вот мои URLS:

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 в моем URL-адресе.

Есть ли простой способ сделать это или не хватает надлежащего способа сделать это?

Спасибо

Edit * Вот мое мнение:

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 

Обновлено URLs:

### 
    # 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) 

Новая ошибка:

Could not resolve URL for hyperlinked relationship using view name "quizzes-list". You may have failed to include the related model in your API, or incorrectly configured the lookup_field attribute on this field.

ответ

3

Вы должны указать уникальное имя для группы захваченных имен.

url(r'^video/(?P<pk1>[0-9]+)/quiz/(?P<pk2>[0-9]+)/list/$', 
    views.QuizList.as_view(), 
    name='quizzes-list'), 

доступа соответствующие pk* значения в представлении через,

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) 
+0

Я все еще не понимая. Я новичок в этом. Я опубликовал свои мнения. Как мне реализовать соответствующий pk * для них? – Ryan113

+1

вы можете получить значения pk * для любых встроенных методов, таких как get, post .. –

+0

Я обновил все, но теперь получаю новую ошибку, которую я разместил выше. Я запутался в ошибке, потому что «список опросов» указан в имени URL-адреса, и у меня нет поля lookup_field. Любое направление? Цените всю помощь. – Ryan113