我正在使用 userena 1.2 和 Django 1.4。我正在尝试创建多个用户配置文件,但在 SO 上的许多帖子之后我没有运气。
我创建了 2 个自定义模型和一个像这样的表单:
class BaseProfile(UserenaBaseProfile):
""" Default profile """
user = models.OneToOneField(User, unique=True, verbose_name = _('user'), related_name='base_profile')
@property # accessing a method as a property
def is_seller(self):
"""Find out if this is a Seller user"""
try:
self.seller
return True
except Seller.DoesNotExist:
return False
def get_profile_type(self):
"""return the profile type model"""
if self.is_seller:
return self.seller
else:
return self.customer
class Seller(BaseProfile):
company = models.CharField(_('Company'),max_length=100, null=True, blank=True,)
class Customer(BaseProfile):
favourite_snack = models.CharField( _('favourite snack'), max_length=5 )
并覆盖了注册表单:
class SignupFormExtra(SignupForm):
# stuff in here
def save(self):
# stuff in here
现在问题出在save方法内部。
基于这个答案,我尝试实现一个自定义管理器,但我没有运气(我是 django 新手)。我理解的重点是该Save
方法应该返回一个 Django 用户,而不是一个 userena 配置文件。
def save(self):
user = super(SpamSignupForm,self).save()
new_customer = Customer.objects.create_user()
return new_user
然后我尝试了这样的事情:
def save(self):
new_user = super(SignupFormExtra, self).save()
new_user.save()
customer = Customer(profile = new_user.get_profile(), user=new_user)
customer.save()
return new_user
该get_profile()
方法将始终(我猜)返回 settings.AUTH_PROFILE_MODULE 中定义的基本配置文件。在我看来,作者使用子配置文件中的一个字段作为与Baseprofile的 OneToOne 关系同时实现多表继承
,
这似乎是错误的,为什么?这对我来说似乎不合适。profile
class Customer(Baseprofile):
profile = models.OneToOneField(Baseprofile,
unique=True,
verbose_name=_('profile'),
related_name='student')
是的,基本上我已经花了一整天的时间试图弄清楚这一点,但我仍然迷路了。