当多类用户扩展BaseProfile时,如何访问模板中的Django注册数据
好吧,我是Django的新手(和一般的编程,我正在构建一个需要多种类型用户的网站。我在AUTH_PROFILE_模块中创建了一个基类,并将不同的用户类型继承自基类。我的问题是如何访问从模板中继承自基类的类中保存的数据。我知道我可以使用user.get_profile.field处理基类内的任何内容,但它不适用于基类外的字段。如果可以查看我的代码,可能更容易理解 models.py当多类用户扩展BaseProfile时,如何访问模板中的Django注册数据,django,django-templates,django-registration,django-users,Django,Django Templates,Django Registration,Django Users,好吧,我是Django的新手(和一般的编程,我正在构建一个需要多种类型用户的网站。我在AUTH_PROFILE_模块中创建了一个基类,并将不同的用户类型继承自基类。我的问题是如何访问从模板中继承自基类的类中保存的数据。我知道我可以使用user.get_profile.field处理基类内的任何内容,但它不适用于基类外的字段。如果可以查看我的代码,可能更容易理解 models.py class BaseProfile(models.Model): user = models.Foreign
class BaseProfile(models.Model):
user = models.ForeignKey(User, unique=True)
#Other common fields
...
class StudentProfile(BaseProfile):
user_type = models.CharField(max_length=20, default="student")
#Other student specific fields
...
class InstructorProfile(BaseProfile):
user_type = models.CharField(max_length=20, default="instructor")
#Other instructor specific fields
...
设置.py
AUTH_PROFILE_MODULE = 'signup.BaseProfile'
我有单独的教师和学生表单,每个表单中都有用户类型作为HiddenInput字段,因此用户无法更改它,因此它默认为我想要的。我还设置了信号以适应我需要的不同表单信息。我可以在管理中看到,我的信号将成功地将用户类型保存为“讲师”或“student”分别取决于使用的表单,但我不知道如何在模板中检索。我尝试了几种变体,包括:
template.html
{% if user.get_profile.user_type == "instructor" %}
{% if user.user_type == "instructor" %}
{% if user.InstructorProfile.user_type == "instructor" %}
同样,我对编程非常陌生,不仅仅是Python,因此如果我没有提供足够的信息或解释清楚,请原谅我。提前感谢您的帮助。如果我需要提供任何其他信息,请告诉我。我无法通过搜索找到答案。第一种变体可能是正确的,但问题是em是您的user_type字段位于子类上,而不是基类上。当您执行
get_profile
时,您只会获得基类,因为Django无法简单地从数据库中知道您所期望的子类的类型
与其将user_type字段放在子类上并设置默认值,不如将其放在基类中,然后重写
save
方法以适当地设置它。您可以看看。它为这类事情提供了一个很好的机制。我不太清楚如何重写save方法,但您的答案至少有帮助我意识到它不会像我尝试的那样工作。我仍然需要在我的StudentProfile和InstructorProfile中的用户类型区分,因为我在信号中使用POST信息来确定信号在保存之前会做什么,但我在基类中添加了一个名为teacher的额外字段,然后在信号中设置了teacher=form.cleaned_data['user_type'],这样它将采用我在user_type类中设置的默认值。我不知道这是最好的,但它起了作用。