我是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必须是类型的实例或子类型 现在是实际问题,由于缺乏知识,我无法理解发生了什么。
答案 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)