好了,我是Django的新手(和一般的编程,我正在建立一个需要多种类型的用户的网站。我在AUTH_PROFILE_MODULE中创建了一个基类,并从基类继承了不同的用户类型。我的问题是,如何访问从模板中的基类继承的类中保存的数据。我知道我可以对基类内的任何东西使用user.get_profile.field,但它不适用于基类外的字段。如果你能看到我的代码,可能会更容易理解。
models.py
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
AUTH_PROFILE_MODULE = 'signup.BaseProfile'我为教师和学生提供了单独的表单,并且在每个表单中都有一个user_type作为HiddenInput字段,因此用户无法更改它,因此它默认为我想要的值。我还设置了我的信号,以适应我需要的不同表单信息。我可以在管理员中看到,根据使用的表单,我的信号将成功地将user_type分别保存为“教师”或“学生”,但我不知道如何在模板中检索它。我尝试了几种变体,包括:
template.html
{% if user.get_profile.user_type == "instructor" %}
{% if user.user_type == "instructor" %}
{% if user.InstructorProfile.user_type == "instructor" %}再说一次,我对编程非常陌生,不仅仅是Python,所以如果我没有提供足够的信息或解释得很清楚,请原谅。提前感谢您的帮助。如果我需要提供任何其他信息,请告诉我。我无法通过搜索找到答案。
发布于 2012-09-04 23:21:48
第一个变体是正确的,但问题是user_type字段在子类上,而不是基类上。当你执行get_profile时,你只能得到基类,因为Django无法简单地从数据库中知道你想要什么样的子类。
与其将user_type字段放在子类上并设置默认值,不如将它放在基类中,并覆盖save方法以适当地设置它。
发布于 2012-09-14 03:25:49
你可以看看django-polymorphic。它为这类事情提供了一种很好的机制。
https://stackoverflow.com/questions/12265576
复制相似问题