加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读