Multiple user profiles in django-userena

I am trying to make several profiles for Userena - each user can have only one type of profile. After other discussions, I use multiple table inheritance, but when I do this, I can’t get the data to save into derived models. It all ends up being a CommonProfile, which should not be possible / allowed. Code example:

in models.py :

 # 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() 

in forms.py

 # 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 
+4
source share
1 answer

I had the same problem this weekend. Try using the save function

 def save: #your other code spam_field = self.cleaned_data['spam_field'] new_spam_user = SpamProfile.objects.create_user(spam_field) return new_user 
+1
source

Source: https://habr.com/ru/post/1414664/


All Articles