【发布时间】:2013-06-30 15:01:11
【问题描述】:
我正在使用 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 方法中。
基于this answer,我尝试实现一个自定义管理器,但我没有运气(我是一个django 新手)。我理解的重点是Save 方法应该返回一个 Django 用户,而不是一个 userena 配置文件。
def save(self):
user = super(SpamSignupForm,self).save()
new_customer = Customer.objects.create_user()
return new_user
然后我尝试了类似this:
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 中定义的基本配置文件。
在我看来,作者在 subprofile 中使用 profile 字段作为与 Baseprofile 的 OneToOne 关系同时实现 多表继承,为什么?这对我来说似乎不合适。
class Customer(Baseprofile):
profile = models.OneToOneField(Baseprofile,
unique=True,
verbose_name=_('profile'),
related_name='student')
是的,基本上我已经花了一整天的时间试图弄清楚这一点,但我还是迷路了。
【问题讨论】:
标签: django django-users django-profiles