- Multiple User Profiles in django-userena
- # models.py
- # This is an example of how i've attempted to get
- # multiple user profiles working with Userena
- from django.contrib.auth.models import User
- from django.db import models
- from userena.models import UserenaLanguageBaseProfile
- class CommonProfile(UserenaLanguageBaseProfile):
- """Common fields for 2 user profiles: Spam and Eggs"""
- user = models.OneToOneField(User)
- common_field = models.CharField(max_length=100)
- @property
- def is_spam(self):
- """Find out if this is a Spam user"""
- try:
- self.spamprofile
- return True
- except SpamProfile.DoesNotExist:
- return False
- def get_real_type(self):
- """return the real model"""
- if self.is_spam:
- return self.spamprofile
- else:
- return self.eggsprofile
- class SpamProfile(CommonProfile):
- spam_field = models.CharField(max_length=20)
- class EggsField(CommonProfile):
- eggs_field = models.SmallIntegerField()
- # forms.py
- # This is the form to sign up a Spam Type Person
- from django import forms
- from userena.forms import SignupFormTos
- from . models import CommonProfile, SpamProfile
- class SpamSignupForm(SignupFormTos):
- """signup a Spam Person"""
- common_field = forms.CharField(label='what is your quest')
- spam_field = forms.CharField(label='what kind of spam are you')
- def clean(self):
- cleaned_data = super(SpamSignupForm,self).clean()
- #do stuf, same idea for clean_<field>
- return cleaned_data
- def save(self):
- """Save the SpamProfile"""
- user = super(SpamSignupForm,self).save()
- common_profile = user.get_profile()
- spam_profile = SpamProfile(commonprofile_ptr=common_profile)
- spam_profile.spam_field = self.cleaned_data['spam_field']
- spam_profile.save()
- return spam_profile
- def save:
- #your other code
- spam_field = self.cleaned_data['spam_field']
- new_spam_user = SpamProfile.objects.create_user(spam_field)
- return new_user