Django-在视图中访问关系数据库
这是我的forms.py: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
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”