2016-05-06 8 views
0

jeden ,, Ich bin mitget_success_url() nimmt genau 3 Argumente (2 angegeben)

django-registration-Redux (1,4)

für meine django Anmeldung (django 1.8), aber, wenn nie ich registriert das Web wird den Fehler enter image description here

zeigen, aber die views.py in form_valid, Zeile 43 ist es die Bearbeitungsfunktion, es scheint nicht über das Register?

views.py

@login_required 
def edit_thing(request, slug): 
# grab the object... 
    thing = ProductsTbl.objects.get(slug=slug) 
    if thing.user != request.user: 
     raise Http404 
# set the form we're using... 
    form_class = ProductsTblForm 
    if request.method == 'POST': 
# grab the data from the submitted form 
     form = form_class(data=request.POST,files=request.FILES,instance=thing)#**line 43** 
     if form.is_valid(): 
      # save the new data 
      form.save() 
      return redirect('thing_detail', slug=thing.slug) 
# otherwise just create the form 
    else: 
     form = form_class(instance=thing) 
# and render the template 
    return render(request, 'things/edit_thing.html', { 
     'thing': thing, 
     'form': form, 
    }) 

urls.py

from django.conf.urls import patterns, url,include 
from django.contrib import admin 
from django.views.generic import TemplateView 
from designer import views 
from designer.backends import MyRegistrationView 
from django.conf import settings 
from django.contrib.auth.views import (
    password_reset, 
    password_reset_done, 
    password_reset_confirm, 
    password_reset_complete, 
) 

.... 
urlpatterns = [ 
    .... 
    url(r'^accounts/register/$', MyRegistrationView.as_view(), name='registration_register'), 
    .... 
] 

registration_form.html

<h1>Registration Form</h1> 
<form role="form" action="" method="post"> 
{% csrf_token %} 
{{ form.as_p }} 
<input type="submit" value="Submit" /> 
</form> 
{% endblock content %} 

,, obwohl dieser Fehler ,, meine Datenbanken noch in den Benutzer und das Passwort geschrieben ,,,. kann jemand mir sagen, warum ich diesen Fehler habe ,, Vielen Dank

backends.py

from registration.backends.simple.views import RegistrationView 

class MyRegistrationView(RegistrationView): 
    def get_success_url(self, request, user): 
# the named URL that we want to redirect to after # successful registration 
     return ('home') 
+2

zeigen Bitte die ** ** Vollzurückverfolgungs, als Text anstelle eines Bildes. – Alasdair

+0

Ich füge einfach die backends.py –

Antwort

2

Die Methode get_success_url akzeptiert keine Anfrage als Argument. Entfernen Sie es.

class MyRegistrationView(RegistrationView): 
    def get_success_url(self, user): 
     # the named URL that we want to redirect to after # successful registration 
     return ('home') 

In diesem Fall, da Sie immer auf die Ansicht home umleiten, können Sie success_url stattdessen setzen:

class MyRegistrationView(RegistrationView): 
    success_url = 'home' 
+0

danke, nachdem ich die Anfrage entfernt habe, kann es funktionieren –

3

In django-registration-redux RegistrationView hat als diese get_success_url definiert.

def get_success_url(self, user=None): 
    """ 
    Use the new user when constructing success_url. 
    """ 
    return super(RegistrationView, self).get_success_url() 

Es scheint also, dass nur zwei Parameter an diese Funktion übergeben werden. Doch in der Unterklasse von, wenn Sie

def get_success_url(self, request, user): 
    # the named URL that we want to redirect to after # successful registration 
    return ('home') 

die einen zusätzlichen Request-Parameter hat, die Sie nicht empfangen werden. daher der Fehler.

+0

vielen Dank –

+1

Froh, dass ich geholfen habe. – e4c5

0

nach Version 1.4 der get_success_url Methode nicht Anfrage als Argument nehmen:

def get_success_url(self, user=None): 

Wenn Sie jedoch das Anforderungsobjekt bearbeiten müssen (z. B. wenn Sie sich an die Seite erinnern möchten, von der sich der Benutzer entschieden hat) gister, das als ein get oder post Argument übergeben werden kann) django-registration-redux liefert ein sehr bequemes Signal: registration.signals.user_registered

wie folgt:

def remember_program_for_registration(sender, user, request, **kwargs): 
    [do some processing of the request object]