Mehrere Benutzerprofile in Django-Userena

Ich versuche, mehrere Profile für Userena zu erstellen. Jeder Benutzer kann nur einen Profiltyp haben. Nach anderen Diskussionen verwende ich Inhertience für mehrere Tabellen, aber wenn ich dies tue, kann ich keine Daten zum Speichern in den abgeleiteten Modellen abrufen. Am Ende ist alles CommonProfile, was nicht möglich / erlaubt sein sollte. Beispielcode folgt:

immodels.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()

imforms.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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage