我使用的是modelformset_factory,在我的view函数中,我使用的是form_with_post=FormSet(请求.POST)在
但当表单有错误时,即我不更新所需字段时,从中创建forset对象需要花费大量时间请求.POST大约2-3分钟
不过,它不会抛出任何异常或错误,但在djano服务器的日志中,有时我观察到以下错误
"nhandled exception in thread started by <bound method Command.inner_run of"
我有没有做错什么事?在
我的模型如下所示:
class Un_Verified_bn_in(models.Model):
id = models.IntegerField(primary_key=True)
phrase = models.CharField(max_length=30)
author = models.CharField(max_length=30,null=True)
time = models.DateField(null=True)
alternate_phrase = models.CharField(max_length=30,null=True)
verified_by_usr = models.BooleanField(max_length=30)
verified_by_admin = models.BooleanField(max_length=30)
discard_word = models.BooleanField(max_length=30)
我的模型表单如下所示:
^{pr2}$我的视图.py具体如下:
def user_page(request,lang="bn",locale="bn_in"):
FormSet = modelformset_factory(Un_Verified_bn_in,form=Un_Verified_bn_in_form,extra=0)
query = Un_Verified_bn_in.objects.all().filter(verified_by_usr=False).filter(verified_by_admin=False)
paginator = Paginator(query, 10)
page = request.GET.get('page')
usr_name = request.user
try:
objects = paginator.page(page)
except PageNotAnInteger:
objects = paginator.page(1)
except EmptyPage:
objects = paginator.page(paginator.num_pages)
if request.method == 'POST':
form_with_post = FormSet(request.POST)
if form_with_post.is_valid():
print "form is valid"
instances = form_with_post.save(commit=False)
for instance in instances:
obj = Un_Verified_bn_in.objects.get(pk=instance.id)
obj.author = request.user_name
obj.verified_by_usr = True
instance.save()
obj.save()
context = {'objects':objects,'formset': form_with_post}
return render_to_response('unverified.html', context,
context_instance=RequestContext(request))
else:
page_query = query.filter(id__in=[object.id for object in objects])
formset = FormSet(queryset=page_query)
context = {'objects': objects, 'formset': formset}
return render_to_response('unverified.html', context,
context_instance=RequestContext(request))
好吧,你正在遍历一个很长的对象列表,再次从基调用它们,然后保存它们(如果我读得正确的话,会保存两次)——这是大量的查询。在
你可以做的是:
1)将author的值传递给formset,将author as field添加到form中,在forminit方法中设置
2)将已验证的_添加到\u usr以形成隐藏字段。在forminit方法中将其设置为True
3)只需保存表单集。在
回复评论-https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#model-formsets。如果不将queryset作为参数传递给formset,则它将使用相关模型.objects.all()作为默认查询集。(link)。我想你以前错过了。我说您在那个里循环查看很长的列表—我认为这是有意的,您没有将另一个queryset作为值传递给formset。我猜问题就是从这里来的。在
艾伦
相关问题 更多 >
编程相关推荐