2016-06-24 31 views
0

Ich habe diese URL definiert:Django schlagen nicht Klassenansicht auf Formular Get

url(r'^persons/(?P<id_person>P\.\d+)/forms/(?P<id_form>\w+\.\d+)/$', views.PersonFormView.as_view()) 

die Regex Kontrollen Tests mit einem regex testor: persons/P.1/forms/D.1/

Das ist meine Klassenansicht:

class PersonFormView(APIView): 
def get(self, request, id_person, id_form, format=None): 
    form = Form.get_form_for_person(self, id_person, id_form) 
    serializer = FormSerializer(form, many=True) 
    return Response(serializer.data) 

GET es nicht die Ansicht trifft. Hilfe wird sehr geschätzt.

UPDATE: Es scheint URL-Definitionen kollidieren. Ich habe diese beiden:

url(r'^persons/(?P<id_person>P\.\d+)/forms/(?P<formacronym>\w+)/$', views.PersonFormCreateView.as_view()), 
url(r'^persons/(?P<id_person>P\.\d+)/forms/(?P<id_form>\w+\.\d+)/$', views.PersonFormView.as_view()), 

ich die APIs verwenden diese URLs schlagen können, möchten:

/persons/P.1/forms/D/ 
/persons/P.1/forms/D.1/ 

Ist es möglich, zwei URLs zu definieren, so dass ich bin in der Lage zu durchsuchen die Verwendung von 2 Beispiel URLs nur oben?

+1

Was schlägt es dann? Erhalten Sie einen Fehler? – solarissmoke

+0

Ich bekomme einen 404: GET /persons/P.1/forms/D.1/ HTTP/1.1 "404 23 – obautista

Antwort

0

Ihre Regex ist nicht korrekt für diese URL.

versuchen diese statt:

url(r'^persons/P.(?P<id_person>\d+)/forms/D.(?P<id_form>\d+)/$', some_view), 

Edit:

wenn zweite Argument ist optional mit einem * erklärt werden sollte. So (nicht getestet):

Ich sehe wirklich nicht den Punkt des Hinzufügens von Punkten und D oder P Zeichen. Ich empfehle es einfach zu halten, Um zB:

/Personen/1/forms /Personen/1/forms/1

Wich würde durch zwei regex acomplished werden:

url(r'^persons/(?P<id_person>\d+)/forms/$', some_view), 
url(r'^persons/(?P<id_person>\d+)/forms/(?P<id_form>\d+)/$', some_view), 

plus, In der Ansicht muss id_form argument einen Standardwert haben.

+0

@ Dowling - das funktioniert auch nicht. – obautista

+0

Erhalten Sie eine Ausnahme? Ich würde 1. überprüfen Sie voll 2. Überprüfe, ob APIView definiert ist, während du diese Klasse erweiterst (du musst sie importieren: aus rest_framework.views importieren APIView) –

+0

@Dowling - bitte beachte ich habe meine Frage aktualisiert Danke für die Hilfe – obautista

Verwandte Themen