首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多类用户扩展BaseProfile时如何访问模板中的Django注册数据

多类用户扩展BaseProfile时如何访问模板中的Django注册数据
EN

Stack Overflow用户
提问于 2012-09-04 22:25:04
回答 2查看 150关注 0票数 1

好了,我是Django的新手(和一般的编程,我正在建立一个需要多种类型的用户的网站。我在AUTH_PROFILE_MODULE中创建了一个基类,并从基类继承了不同的用户类型。我的问题是,如何访问从模板中的基类继承的类中保存的数据。我知道我可以对基类内的任何东西使用user.get_profile.field,但它不适用于基类外的字段。如果你能看到我的代码,可能会更容易理解。

models.py

代码语言:javascript
运行
复制
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
    ...

settings.py

代码语言:javascript
运行
复制
AUTH_PROFILE_MODULE = 'signup.BaseProfile'

我为教师和学生提供了单独的表单,并且在每个表单中都有一个user_type作为HiddenInput字段,因此用户无法更改它,因此它默认为我想要的值。我还设置了我的信号,以适应我需要的不同表单信息。我可以在管理员中看到,根据使用的表单,我的信号将成功地将user_type分别保存为“教师”或“学生”,但我不知道如何在模板中检索它。我尝试了几种变体,包括:

template.html

代码语言:javascript
运行
复制
{% if user.get_profile.user_type == "instructor" %}
{% if user.user_type == "instructor" %}
{% if user.InstructorProfile.user_type == "instructor" %}

再说一次,我对编程非常陌生,不仅仅是Python,所以如果我没有提供足够的信息或解释得很清楚,请原谅。提前感谢您的帮助。如果我需要提供任何其他信息,请告诉我。我无法通过搜索找到答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-04 23:21:48

第一个变体是正确的,但问题是user_type字段在子类上,而不是基类上。当你执行get_profile时,你只能得到基类,因为Django无法简单地从数据库中知道你想要什么样的子类。

与其将user_type字段放在子类上并设置默认值,不如将它放在基类中,并覆盖save方法以适当地设置它。

票数 0
EN

Stack Overflow用户

发布于 2012-09-14 03:25:49

你可以看看django-polymorphic。它为这类事情提供了一种很好的机制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12265576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档