2014-10-29 5 views
7

Ho letto un sacco di domande e risposte per quanto riguarda questo, ma ancora nessuna fortuna. Ad esempio here è un'ottima risposta, ma molto probabilmente non si applica a django-registration 1.0.Come aggiungere campi personalizzati() supplementari in Django-registrazione 1.0

Il mio obiettivo è quello di aggiungere due campi personalizzati, vale a dire l'organizzazione e posizione nel modulo di iscrizione. Nota: Sto usando un solo passaggio registrazione django fornito da registration.backend.simple.

+0

Perché dici la risposta non si applica a Django-registrazione 1.0? –

+0

@ChrisHawkes Ricevo un errore "impossibile importare il registro dei nomi". Penso che il registro sia privato in django-registration 1.0. E ho provato a usare "url (r '^ register/$', RegistrationView.as_view (form_class = UserRegForm))". Ma ancora fortuna – Iqbal

+0

secondo una delle risposte fornite per correggere tale errore con la nuova versione di django-registrazione è necessario aggiungere questo, dai modelli django.conf.urls importazione, includere, url da registration.backends .default.views importazione RegistrationView da abby.apps.accounts.forms importare UserRegForm urlpatterns = modelli ('', url (r '^ registrare/$', RegistrationView.as_view (form_class = UserRegForm)), ) http://stackoverflow.com/questions/14726725/python-django-django-registration-add-an-extra-field/16366997#16366997 –

risposta

0

Dal momento che non si ha ancora una risposta, mi offro questo, anche se non è esattamente quello che stai chiedendo. Penso che potrebbe aiutarti comunque ...

Ecco come l'ho fatto in alcuni progetti usando django-registration 1.0, Python 2.7 e Django 1.6. In questo caso, mi basta usare username, email e password per il segno e quindi l'utente può aggiungere i campi del profilo dopo che sono registrati. Non dovrebbe essere troppo difficile modificarlo per accettare i campi al momento della registrazione.

io uso Twitter Bootstrap per lo styling, così i miei modelli possono o non possono aiutare. Li ho lasciati fuori in questo caso.

ho creato un paio di applicazioni chiamato accounts e authentication che tengono i miei modelli, forme e punti di vista:

accounts.models.UserProfile

from django.db import models 

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    title = models.CharField(max_length=100) 
    company = models.CharField(max_length=250) 

authentiction.forms.EditUserProfileForm

from django.forms import ModelForm 

class EditUserProfileForm(ModelForm):** 
    . . . 
    title = forms.CharField(widget=forms.TextInput()) 
    company = forms.CharField(widget=forms.TextInput()) 
    . . . 

accounts.views.EditUserProfileView

from django.views.generic.base import View 
from django.utils.decorators import method_decorator 
from django.contrib.auth.decorators import login_required 
from django.shortcuts import render, get_object_or_404 
from django.http import HttpResponseRedirect 

from .models import UserProfile 
from .forms import EditUserProfileForm 

class EditUserProfileView(View): 

    form_class = EditUserProfileForm 
    template_name = 'accounts/profile_edit.html' 

    @method_decorator(login_required) 
    def get(self, request, *args, **kwargs): 

     profile = get_object_or_404(UserProfile, user=request.user) 

     form_dict = { 
      'title': profile.title, 
      'company': profile.company, 
     } 

     form = self.form_class(form_dict) 

     return render(request, self.template_name, { 
      'form': form, 
      'profile': profile, 
     }) 

    @method_decorator(login_required) 
    def post(self, request, *args, **kwargs): 

     profile = get_object_or_404(UserProfile, user=request.user) 

     form = self.form_class(request.POST, instance=profile) 

     if form.is_valid(): 

      company = form.cleaned_data['company'] 
      title = form.cleaned_data['title'] 

      title.company = title 
      profile.company = company 

      # you might need to save user too, depending on what fields 
      request.user.save() 
      profile.save() 

      return HttpResponseRedirect('/dashboard/') 

     return render(request, self.template_name, {'form': form}) 

project.urls

url(r'^accounts/profile/edit/', EditUserProfileView.as_view(), name='edit_user_profile_view'),