2016-06-16 9 views
0

Ich versuche, .signup() in einem Formular überschreiben, die von SignupForm erbt, aber es scheint nicht zu funktionieren. Mein Hauptziel ist es, eine Instanz des UserProfile Modells gleichzeitig mit dem Speichern des User Modells zu speichern.Wie überschreiben .signup() auf Django-Allauth Formular

Hier ist der Code, die ich bisher habe:

class MySignupForm(SignupForm): 
    """ This form only used for django-allauth package (called in Settings.py) """ 
    first_name = forms.CharField(max_length=30, widget=forms.TextInput(attrs={'placeholder': 'First name'})) 
    last_name = forms.CharField(max_length=30, widget=forms.TextInput(attrs={'placeholder': 'Last name'})) 
    dob = forms.CharField(widget=forms.TextInput(attrs={'type': 'date', 'min': '1940-01-01', 'max': '2030-01-01'})) # HTML5 Widget... works? 

    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 

     login_url = reverse_lazy('account_login') 

     self.helper = FormHelper() 
     self.helper.layout = Layout(
      Div('first_name', css_class='col-md-6'), 
      Div('last_name', css_class='col-md-6'), 
      Div('dob', css_class='col-md-12', style='clear: both'), 
      Div('username', css_class='col-md-12', style='clear: both'), 
      Div('email', css_class='col-md-12'), 
      Div('password1', css_class='col-md-12', style='clear: both'), 
      Div('password2', css_class='col-md-12'), 
      HTML('<div class="col-md-12"><br></div>'), 

      FormActions(
       Submit('submit', 'Register', css_class='btn btn-primary', style='display:block;clear:both;margin: 0 0 15px 15px;float:left'), 
       HTML('<a href="{0}" class="btn btn-default" style="margin: 0 15px 15px 0;float:right;display:inline">Sign In</a>'.format(login_url)) 
      ) 
     ) 

    def signup(self, request, user): 
     print(form.cleaned_data['dob']) 
     return user 

Wie Sie sehen können, ich versuche zu print() die dob, aber wenn ich versuche, die Anmeldung, erscheint nichts in meinem Terminal up! Jede Hilfe wäre willkommen.

Antwort

2

Sie müssen dies in Ihrem settings.py

ACCOUNT_SIGNUP_FORM_CLASS = 'yourproject.yourapp.forms.SignupForm' 

EDIT:

Sie können einfach die post_save Signal verwenden userprofile Instanz

from django.db.models.signals import post_save 

@receiver(post_save, sender=User, weak=False, dispatch_uid='models.create_userprofile') 
def create_userprofile(sender, instance, created, **kwargs): 
    if created: 
     UserProfile.objects.create(user=instance) 
+0

Ich habe eigentlich, dass bereits zu schaffen - Die benutzerdefinierten Felder werden in meinem Registrierungsformular angezeigt, aber die Anweisung 'print()' druckt nicht, was bedeutet, dass sie bei der Anmeldung nicht ausgeführt wird. – Hybrid

+0

@Hybrid ich bin mir nicht sicher, ob du das schon probiert hast, aber du kannst post_save signalisieren. Sehen Sie meine Bearbeitung oben – doniyor

+0

gibt es auch 'pre_social_login' Signal. -> 'von allauth.socialaccount.signals Import pre_social_login' – doniyor