未定义全局名称CustomUser

时间:2014-04-06 04:25:14

标签: python django

我是django.i中的新手我已经使用userena.Now生成自动引用代码的网站我已经写了一些从论坛复制的代码,这里是代码..

from django.contrib.auth.models import User
import uuid
import base64  
from django.utils.translation import ugettext_lazy as _
from django.db.models.signals import post_save
from userena.models import UserenaBaseProfile  
from django.db import models
from userena.utils import user_model_label 

class MyProfile(UserenaBaseProfile):

    user = models.OneToOneField(User,unique=True,  
                        verbose_name=_('user'),related_name='my_profile')  
favourite_snack = models.CharField(_('favourite snack'),max_length=5)
referral_code = models.CharField(max_length=300, blank=True, null=True)

    def get_absolute_url(self):
        return u'/profile/show/%d' % self.id

    def generate_verification_code(self):
        return base64.urlsafe_b64encode(uuid.uuid1().bytes.encode("base64").rstrip())[:25]

    def save(self, *args, **kwargs):
        if not self.pk:
            self.referral_code = self.generate_verification_code()
        elif not self.verification_code:
            self.referral_code = self.generate_verification_code()
        return super(CustomUser, self).save(*args, **kwargs)

现在你可以在这个代码的最后一行看到我使用 super 函数,它有两个参数,即CustomUser和self.Now,当我试图运行我的网站时,我面临一个错误 NameError:全局名称' CustomUser'未定义,然后我将CustomUser更改为用户,然后出错 TypeError:super(type,obj):obj必须是类型的实例或子类型 现在是实际问题,由于缺乏知识,我无法理解发生了什么。

2 个答案:

答案 0 :(得分:1)

您在save()模型上覆盖MyProfile方法 - 应将其传递给super()。此外,这里不需要return

def save(self, *args, **kwargs):
    if not self.pk:
        self.referral_code = self.generate_verification_code()
    elif not self.verification_code:
        self.referral_code = self.generate_verification_code()
    super(MyProfile, self).save(*args, **kwargs)

答案 1 :(得分:1)

来自the docs

  

返回一个代理对象,该方法将方法调用委托给 type 的父类或兄弟类。

因此type必须是您想要代理的类型,即当前类。

return super(MyProfile, self).save(*args, **kwargs)