2010-01-06 4 views
2

J'ai une question simple. Voici mon profil:Formulaire d'inscription avec champ de profil

Profil de classe (models.Model):

user = models.ForeignKey(User, unique=True) 
born = models.DateTimeField('born to')  
photo = models.ImageField(upload_to='profile_photo') 

Je veux créer un formulaire d'inscription avec ces champs (à partir de modèles de l'utilisateur et le profil):

nom d'utilisateur, prenom, last_name, né et photo.

Tous ces champs sont obligatoires.

Comment est-ce que je fais ça ??

Comment get_profile() fonctionne-t-il dans un modèle pour ce problème?

Merci :)

Répondre

8

Configuration

Utilisez-vous les django-profiles et django-registration projets? Sinon, vous devriez — beaucoup de ce code a déjà été écrit pour vous.

Profil

Votre code de profil d'utilisateur est:

class Profile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    born = models.DateTimeField('born to')  
    photo = models.ImageField(upload_to='profile_photo') 

Demandez ce profil vous configurez correctement vos paramètres Django? Vous devez ajouter ce sinon, en remplaçant yourapp pour le nom de votre application:

AUTH_PROFILE_MODULE = "yourapp.Profile" 

Formulaire d'inscription

django-registration est livré avec des formulaires d'inscription par défaut, mais vous avez spécifié que vous vouliez créer votre propre. Chaque Django form field defaults to required donc vous ne devriez pas avoir besoin de changer cela. La partie importante consiste simplement à s'assurer de gérer les champs de formulaire d'inscription existants et d'ajouter dans la création de profil. Quelque chose comme cela devrait fonctionner:

from django import forms 
from registration.forms import RegistrationForm 
from yourapp.models import Profile 
from registration.models import RegistrationProfile 

class YourRegistrationForm(RegistrationForm): 
    born = forms.DateTimeField() 
    photo = forms.ImageField() 

    def save(self, profile_callback=None): 
     new_user = RegistrationProfile.objects.create_inactive_user(username=self.cleaned_data['username'], 
     password=self.cleaned_data['password1'], 
     email = self.cleaned_data['email']) 
     new_profile = Profile(user=new_user, born=self.cleaned_data['born'], photo=self.cleaned_data['photo']) 
     new_profile.save() 
     return new_user 

Apporter ensemble

Vous pouvez utiliser les modèles par défaut django-registration et points de vue, mais voudra les transmettre votre formulaire dans urls.py:

from registration.backends.default import DefaultBackend 
from registration.views import activate 
from registration.views import register 

# ... the rest of your urls until you find somewhere you want to add ... 

url(r'^register/$', register, 
    {'form_class' : YourRegistrationForm, 'backend': DefaultBackend}, 
    name='registration_register'), 
+0

merci vous beaucoup – xRobot

Questions connexes