Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当多类用户扩展BaseProfile时,如何访问模板中的Django注册数据_Django_Django Templates_Django Registration_Django Users - Fatal编程技术网

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

当多类用户扩展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

好吧,我是Django的新手(和一般的编程,我正在构建一个需要多种类型用户的网站。我在AUTH_PROFILE_模块中创建了一个基类,并将不同的用户类型继承自基类。我的问题是如何访问从模板中继承自基类的类中保存的数据。我知道我可以使用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
    ...
设置.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类中设置的默认值。我不知道这是最好的,但它起了作用。