python – django-userena中的多个用户配置文件
发布时间:2020-12-20 13:28:18 所属栏目:Python 来源:网络整理
导读:我正在尝试为Userena创建多个配置文件 – 每个用户只能有一个配置文件类型.在进行其他讨论后,我使用了多个表,但是当我这样做时,我无法将数据保存到派生模型中.一切都归结为CommonProfile,这是不可能/允许的.示例代码如下: 在models.py中: # models.py# Thi
我正在尝试为Userena创建多个配置文件 – 每个用户只能有一个配置文件类型.在进行其他讨论后,我使用了多个表,但是当我这样做时,我无法将数据保存到派生模型中.一切都归结为CommonProfile,这是不可能/允许的.示例代码如下:
在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() 在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 解决方法
这个周末我遇到了同样的问题.尝试保存功能
def save: #your other code spam_field = self.cleaned_data['spam_field'] new_spam_user = SpamProfile.objects.create_user(spam_field) return new_user (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |