objects.all()查询不起作用 [英] objects.all() query not working
问题描述
我正在尝试通过django创建用户创建表单。用户(此后为开发人员)可以从主管列表中进行选择以进行注册。问题是,我没有从查询中获取所有主管的列表。当我使用objects.get()时,我收到一个错误,指出接收到2个对象。这意味着查询正在从数据库中获取行。
models.py
来自django.db导入模型
类UserProfile(models.Model):
name = models.CharField(max_length = 50,verbose_name = Name)
login = models.CharField (max_length =(25),verbose_name = Login)
password = models.CharField(max_length = 100,verbose_name = Password)
phone = models.CharField(max_length = 20,verbose_name =电话号码,null = True,默认=无,空白= True)
born_date = models.DateField(verbose_name = Born date,null = True,default = None,blank = True)
last_connection = models.DateTimeField(verbose_name =上次连接的日期,null =真实,默认=无,空白=真实)
email = models.EmailField(verbose_name = Email)
years_seniority = models。 IntegerField(verbose_name = Seniority,默认= 0)
date_created = models.DateField(verbose_name =生日,auto_now_add = True)
def __str __(self):
返回self.n ame
类主管(UserProfile):
专业化=模型。CharField(max_length = 50,verbose_name = Specialisation)
类Developer( UserProfile):
主管=模型。ForeignKey(主管,verbose_name = Supervisor)
表单视图 create_developer.py -
django中的 .shortcuts import从django渲染
.http从TasksManager导入HttpResponse
.models导入主管,开发人员
#view for create_developer
def page(request):
error = False
#如果表单已发布
,如果请求.POST:
,如果请求中有'name'.POST:
name = request.POST.get('name','')
else:
错误=如果在请求中'登录'则为
.POST:
login = request.POST.get('login','')
其他:
错误=正确
如果请求中有密码。POST:
密码= request.POST.get('password','')
else:
error =如果请求中有'supervisor'则为
.POST:
supervisor_id = request.POST。 get('supervisor','')
else:
error = True
if not error:
supervisor = Supervisor.objects.get(id = supervisor_id)
new_dev =开发人员(名称=名称,登录名=登录名,密码=密码,超级用户=超级用户)
new_dev.save()
return HttpResponse(添加了开发者)
其他:
return HttpResponse(发生错误)
否则:
超级用户列表= Supervisor.objects.all()
返回render(request,'en / public / create_developer.html')
模板 create_developer.html
{%扩展了 base.html%}
{%block title_html%}
创建开发者
{%endblock%}
{%block h1% }
创建开发者
{%endblock%}
{%block article_content%}
< form method = post action = {%url'create_developer'%} >
< table>
< tr>
< td>名称< / td>
< td>
< input type = text name = name />
< / td>
< / tr>
< tr>
< td>登录< / td>
< td>
< input type = text name = login />
< / td>
< / tr>
< tr>
< td>密码< / td>
< td>
< input type = text name =密码 />
< / td>
< / tr>
< tr>
< td>主管< / td>
< td>
< select name = supervisor>
{supervisors_list中主管的百分比%}
< option value = {{supervisor.id}}> {{supervisor.name}}< / option>
{%endfor%}
< / select>
< / td>
< / tr>
< tr>
< td>< / td>
< td>
< input type = submit value =有效 />
< / td>
< / tr>
< / table>
< / form>
{%endblock%}
主管选择列表应显示清单。但是我在那里有一个空清单。 {{supervisors_list | length}} 的输出为零。
如何调试?
您必须将上下文传递到html:
from django.shortcuts import render
从django.http导入HttpResponse
从TasksManager.models导入主管,开发人员
#视图create_developer
def page(request):
error = False
#如果表单在请求中发布了
,则POST:
如果请求中有'name'.POST:
name = request.POST.get('name','')
else :
error =如果在请求中'login'为True
.POST:
login = request.POST.get('login','')
else:
错误=如果请求中有'password',则为
.POST:
密码= request.POST.get('password','')
其他:
error =为
如果request.POST中有 supervisor,则:
超级用户ID = request.POST.get ('supervisor','')
else:
error = True
if not error:
supervisor = Supervisor.objects.get(id = supervisor_id)
new_dev =开发人员(名称=名称,登录名=登录名,密码=密码,超级用户=超级用户)
new_dev.save()
return HttpResponse(添加了开发者)
否则:
return HttpResponse(发生的错误)
else:
visitors_list = Supervisor.objects.all()
return render(request,'en / public / create_developer.html',{'超级用户列表':超级用户列表})
I am trying to make a form for user creation through django. The user(henceforth developer) can choose from a list of supervisors to get himself registered. Problem is, I am not getting the list of all the supervisors from the query. When I use objects.get(), I receive an error that 2 objects were received. That means that the queries are getting the rows from the database.
models.py
from django.db import models
class UserProfile(models.Model):
name = models.CharField(max_length=50,verbose_name="Name")
login = models.CharField(max_length=(25),verbose_name="Login")
password = models.CharField(max_length=100, verbose_name="Password")
phone = models.CharField(max_length=20, verbose_name="Phone number", null=True, default=None, blank=True)
born_date = models.DateField(verbose_name="Born date" , null=True,default=None, blank=True)
last_connection = models.DateTimeField(verbose_name="Date of last connection" , null=True, default=None, blank=True)
email = models.EmailField(verbose_name="Email")
years_seniority = models.IntegerField(verbose_name="Seniority", default=0)
date_created = models.DateField(verbose_name="Date of Birthday", auto_now_add=True)
def __str__(self):
return self.name
class Supervisor(UserProfile):
specialisation = models.CharField(max_length=50, verbose_name="Specialisation")
class Developer(UserProfile):
supervisor = models.ForeignKey(Supervisor, verbose_name="Supervisor")
The form view create_developer.py -
from django.shortcuts import render
from django.http import HttpResponse
from TasksManager.models import Supervisor, Developer
# View for create_developer
def page(request):
error = False
# If form has posted
if request.POST:
if 'name' in request.POST:
name = request.POST.get('name', '')
else:
error=True
if 'login' in request.POST:
login = request.POST.get('login', '')
else:
error=True
if 'password' in request.POST:
password = request.POST.get('password', '')
else:
error=True
if 'supervisor' in request.POST:
supervisor_id = request.POST.get('supervisor', '')
else:
error=True
if not error:
supervisor = Supervisor.objects.get(id = supervisor_id)
new_dev = Developer(name=name, login=login, password=password,supervisor=supervisor)
new_dev.save()
return HttpResponse("Developer added")
else:
return HttpResponse("An error as occured")
else:
supervisors_list = Supervisor.objects.all()
return render(request, 'en/public/create_developer.html')
template create_developer.html
{% extends "base.html" %}
{% block title_html %}
Create Developer
{% endblock %}
{% block h1 %}
Create Developer
{% endblock %}
{% block article_content %}
<form method="post" action="{% url 'create_developer' %}" >
<table>
<tr>
<td>Name</td>
<td>
<input type="text" name="name" />
</td>
</tr>
<tr>
<td>Login</td>
<td>
<input type="text" name="login" />
</td>
</tr>
<tr>
<td>Password</td>
<td>
<input type="text" name="password" />
</td>
</tr>
<tr>
<td>Supervisor</td>
<td>
<select name="supervisor">
{% for supervisor in supervisors_list %}
<option value="{{ supervisor.id }}">{{ supervisor.name}}</option>
{% endfor %}
</select>
</td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="Valid" />
</td>
</tr>
</table>
</form>
{% endblock %}
The supervisor select list should show the list. But I am getting an empty list there. The output of {{ supervisors_list|length }} is zero.
How to debug this?
You have to pass context to the html:
from django.shortcuts import render
from django.http import HttpResponse
from TasksManager.models import Supervisor, Developer
# View for create_developer
def page(request):
error = False
# If form has posted
if request.POST:
if 'name' in request.POST:
name = request.POST.get('name', '')
else:
error=True
if 'login' in request.POST:
login = request.POST.get('login', '')
else:
error=True
if 'password' in request.POST:
password = request.POST.get('password', '')
else:
error=True
if 'supervisor' in request.POST:
supervisor_id = request.POST.get('supervisor', '')
else:
error=True
if not error:
supervisor = Supervisor.objects.get(id = supervisor_id)
new_dev = Developer(name=name, login=login, password=password,supervisor=supervisor)
new_dev.save()
return HttpResponse("Developer added")
else:
return HttpResponse("An error as occured")
else:
supervisors_list = Supervisor.objects.all()
return render(request, 'en/public/create_developer.html', {'supervisors_list' : supervisors_list})
这篇关于objects.all()查询不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!