4
Userena에 대해 여러 프로필을 만들려고합니다. 각 사용자는 하나의 프로필 유형 만 가질 수 있습니다. 다른 토론 후에는 다중 테이블 상속을 사용하지만이 작업을 수행하면 파생 된 모델에 데이터를 저장할 수 없습니다. 모든 것이 CommonProfile이되어 결국 허용되거나 허용되어서는 안됩니다. 예제 코드는 다음과 같습니다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
CommonProfile 및 UserenaLanguageBaseProfile의 직접적인 후계자로 그냥 주석, SpamProfile에보십시오. 아니면 솔루션에 함축 된 무언가를 놓치고 있습니까? – yarbelk
예 관리자가 필요합니다. userena가 자신의 managers.py 파일에서 어떻게 구현하는지 볼 수 있습니다 –