Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jul 15th, 2012  |  syntax: None  |  size: 2.02 KB  |  hits: 27  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Multiple User Profiles in django-userena
  2. # models.py
  3. # This is an example of how i've attempted to get
  4. # multiple user profiles working with Userena
  5. from django.contrib.auth.models import User
  6. from django.db import models
  7. from userena.models import UserenaLanguageBaseProfile
  8.  
  9. class CommonProfile(UserenaLanguageBaseProfile):
  10.     """Common fields for 2 user profiles: Spam and Eggs"""
  11.     user = models.OneToOneField(User)
  12.     common_field = models.CharField(max_length=100)
  13.  
  14.     @property
  15.     def is_spam(self):
  16.         """Find out if this is a Spam user"""
  17.         try:
  18.             self.spamprofile
  19.             return True
  20.         except SpamProfile.DoesNotExist:
  21.             return False
  22.  
  23.     def get_real_type(self):
  24.         """return the real model"""
  25.         if self.is_spam:
  26.             return self.spamprofile
  27.         else:
  28.             return self.eggsprofile
  29.  
  30. class SpamProfile(CommonProfile):
  31.     spam_field = models.CharField(max_length=20)
  32.  
  33. class EggsField(CommonProfile):
  34.     eggs_field = models.SmallIntegerField()
  35.        
  36. # forms.py
  37. # This is the form to sign up a Spam Type Person
  38.  
  39. from django import forms
  40. from userena.forms import SignupFormTos
  41. from . models import CommonProfile, SpamProfile
  42.  
  43. class SpamSignupForm(SignupFormTos):
  44.     """signup a Spam Person"""
  45.     common_field = forms.CharField(label='what is your quest')
  46.     spam_field = forms.CharField(label='what kind of spam are you')
  47.  
  48.     def clean(self):
  49.         cleaned_data = super(SpamSignupForm,self).clean()
  50.         #do stuf, same idea for clean_<field>
  51.         return cleaned_data
  52.  
  53.     def save(self):
  54.         """Save the SpamProfile"""
  55.         user = super(SpamSignupForm,self).save()
  56.         common_profile = user.get_profile()
  57.         spam_profile = SpamProfile(commonprofile_ptr=common_profile)
  58.         spam_profile.spam_field = self.cleaned_data['spam_field']
  59.         spam_profile.save()
  60.         return spam_profile
  61.        
  62. def save:
  63.   #your other code
  64.    spam_field = self.cleaned_data['spam_field']
  65.    new_spam_user = SpamProfile.objects.create_user(spam_field)
  66.  
  67.    return new_user