Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
Django-在视图中访问关系数据库_Django_Django Models_Django Forms_Django Templates_Django Views - Fatal编程技术网

Django-在视图中访问关系数据库

Django-在视图中访问关系数据库,django,django-models,django-forms,django-templates,django-views,Django,Django Models,Django Forms,Django Templates,Django Views,这是我的forms.py: class RegistrationForm(forms.Form): PET_CHOICES = ( ('none','---'), ('dog', 'Dog'), ) username = forms.CharField() email = forms.EmailField() password1 = forms.CharField() birthdate = forms.DateField(widget=extr

这是我的forms.py:

class RegistrationForm(forms.Form):
    PET_CHOICES = (
    ('none','---'), ('dog', 'Dog'),
)

    username = forms.CharField()
    email = forms.EmailField()
    password1 = forms.CharField()
    birthdate = forms.DateField(widget=extras.SelectDateWidget)
    pet = forms.ChoiceField(choices=PET_CHOICES)
这是my models.py:

from django.db import models
from django.contrib.auth.models import User
# Create your models here.

class UserExtended(models.Model):
    user = models.ForeignKey(User)
    pet = models.CharField(max_length=40)
    age = models.PositiveSmallIntegerField()
如您所见,此模型扩展了默认的Django用户模型。现在,这是我注册用户的观点:

def registerView(request):
    form = RegistrationForm()
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            user = User.objects.create_user(
                username=form.cleaned_data['username'],
                password=form.cleaned_data['password1'],
                email=form.cleaned_data['email']
            )

            user.userextended_set.pet=form.cleaned_data['pet']
            user.userextended_set.age=form.cleaned_data['birthdate']

            return HttpResponseRedirect('/')
我想知道,这部分代码正确吗

user.userextended_set.pet=form.cleaned_data['pet']
user.userextended_set.age=form.cleaned_data['birthdate']
通过上面的两行代码,我试图添加到UserExtended模型中,该模型具有一个带有User的ForiegnKey。我认为我做错了什么,因为在创建用户之后,我对用户进行了身份验证并使用这些函数登录

authenticate()

由django提供,如果我将其放在django登录后重定向到的模板中

<p>your pet is {{ user.userextended_set.pet }}</p>
。它只是说:

your pet is
。你知道为什么它什么都不显示吗?{{user.userextended_set.pet}

这里的问题是

user.userextended\u set
返回一个
RelatedManager
类型。因此,您无法执行简单的
。pet
将不起作用

现在,看看您的模型,我假设您打算将
UserExtended
扩展到
OneToOneField
,而不是
ForeignKey
。只要您能够管理(非)创建副本,您就可以了

现在,回到您的问题:

你能行

user_extended = user.userextended_set.all()[0]
#Or if you are sure it is a unique relationship,
#user_extended = user.userextended_set.get()
#Note - this would raise error if MultipleObjectsReturned, or DoesNotExist

user_extended.pet = form.cleaned_data['pet']
user_extended.age = form.cleaned_data['age']
另外,在模板中

{{ user.userextended_set.0.pet }}
甚至这个:

{% for u_e in user.userextended_set.all %}
    {{u_e.pet}}
{% empty %}
    Not found
{% endfor %}
问题是,

user.userextended\u set
返回一个
RelatedManager
类型。因此,您无法执行简单的
。pet
将不起作用

现在,看看您的模型,我假设您打算将
UserExtended
扩展到
OneToOneField
,而不是
ForeignKey
。只要您能够管理(非)创建副本,您就可以了

现在,回到您的问题:

你能行

user_extended = user.userextended_set.all()[0]
#Or if you are sure it is a unique relationship,
#user_extended = user.userextended_set.get()
#Note - this would raise error if MultipleObjectsReturned, or DoesNotExist

user_extended.pet = form.cleaned_data['pet']
user_extended.age = form.cleaned_data['age']
另外,在模板中

{{ user.userextended_set.0.pet }}
甚至这个:

{% for u_e in user.userextended_set.all %}
    {{u_e.pet}}
{% empty %}
    Not found
{% endfor %}
问题是,

user.userextended\u set
返回一个
RelatedManager
类型。因此,您无法执行简单的
。pet
将不起作用

现在,看看您的模型,我假设您打算将
UserExtended
扩展到
OneToOneField
,而不是
ForeignKey
。只要您能够管理(非)创建副本,您就可以了

现在,回到您的问题:

你能行

user_extended = user.userextended_set.all()[0]
#Or if you are sure it is a unique relationship,
#user_extended = user.userextended_set.get()
#Note - this would raise error if MultipleObjectsReturned, or DoesNotExist

user_extended.pet = form.cleaned_data['pet']
user_extended.age = form.cleaned_data['age']
另外,在模板中

{{ user.userextended_set.0.pet }}
甚至这个:

{% for u_e in user.userextended_set.all %}
    {{u_e.pet}}
{% empty %}
    Not found
{% endfor %}
问题是,

user.userextended\u set
返回一个
RelatedManager
类型。因此,您无法执行简单的
。pet
将不起作用

现在,看看您的模型,我假设您打算将
UserExtended
扩展到
OneToOneField
,而不是
ForeignKey
。只要您能够管理(非)创建副本,您就可以了

现在,回到您的问题:

你能行

user_extended = user.userextended_set.all()[0]
#Or if you are sure it is a unique relationship,
#user_extended = user.userextended_set.get()
#Note - this would raise error if MultipleObjectsReturned, or DoesNotExist

user_extended.pet = form.cleaned_data['pet']
user_extended.age = form.cleaned_data['age']
另外,在模板中

{{ user.userextended_set.0.pet }}
甚至这个:

{% for u_e in user.userextended_set.all %}
    {{u_e.pet}}
{% empty %}
    Not found
{% endfor %}

userextended\u set
实际上是一个管理器,而不是一个
userextended
对象,因为在
userextended
中有一个
ForeignKey
,这表示
用户
可以有多个
userextended
对象。这可能不是您想要的-您可能想要使用一个
OneToOneField

userextended\u set
实际上是一个管理器,而不是
userextended
对象,因为您在
userextended
中有一个
ForeignKey
,这表示一个
用户
可以有多个
UserExtended
对象。这可能不是您想要的-您可能想要使用一个
OneToOneField

userextended\u set
实际上是一个管理器,而不是
userextended
对象,因为您在
userextended
中有一个
ForeignKey
,这表示一个
用户
可以有多个
UserExtended
对象。这可能不是您想要的-您可能想要使用一个
OneToOneField

userextended\u set
实际上是一个管理器,而不是
userextended
对象,因为您在
userextended
中有一个
ForeignKey
,这表示一个
用户
可以有多个
UserExtended
对象。这可能不是您想要的-您可能希望使用
OneToOneField

当我将其更改为OneToOneField,然后创建一个新用户时,它会显示一个错误:“AttributeError at/register/”(调用registerView)。错误为“'User'对象没有'userextended_set'属性”。回溯指的是registerView中的一行,上面写着“user.userextended_set.pet=form.cleaned_data['pet']”。。知道它为什么要这样做吗?好的,在
OneToOneField
中,您将该字段引用为
user.userextended
。当我将其更改为OneToOneField,然后创建一个新用户时,它会给我一个错误,说“AttributeError at/register/”(它调用registerView)。错误为“'User'对象没有'userextended_set'属性”。回溯指的是registerView中的一行,上面写着“user.userextended_set.pet=form.cleaned_data['pet']”。。知道它为什么要这样做吗?好的,在
OneToOneField
中,您将该字段引用为
user.userextended
。当我将其更改为OneToOneField,然后创建一个新用户时,它会给我一个错误,说“AttributeError at/register/”(它调用registerView)。错误为“'User'对象没有'userextended_set'属性”。回溯指的是registerView中的一行,上面写着“user.userextended_set.pet=form.cleaned_data['pet']”。。知道它为什么要这样做吗?好的,在
OneToOneField
中,您将该字段引用为
user.userextended
。当我将其更改为OneToOneField,然后创建一个新用户时,它会给我一个错误,说“AttributeError at/register/”(它调用registerView)。错误为“'User'对象没有'userextended_set'属性”。回溯指的是registerView中的一行,上面写着“user.usere”