从创建对象时Django请求.POST从modelformset_工厂花费大量时间,有时会崩溃

2024-04-20 01:27:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是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))

Tags: informbyobjectsmodelsrequestwithcontext
1条回答
网友
1楼 · 发布于 2024-04-20 01:27:52

好吧,你正在遍历一个很长的对象列表,再次从基调用它们,然后保存它们(如果我读得正确的话,会保存两次)——这是大量的查询。在

你可以做的是:

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。我猜问题就是从这里来的。在

艾伦

相关问题 更多 >