我已经做了一些与sqlite并发问题相关的阅读,但是我不知道它们如何应用于django,因为它本质上是单线程的。我也没有使用任何多进程模块。我在并发编程方面也完全没有经验,因此如果有人能确定以下代码导致操作错误的原因:“数据库被锁定”,我将不胜感激。
视图.py
def screening(request, ovramt=None):
errors = []
if request.method == "POST":
form = ScreeningForm(request.POST)
if form.is_valid():
print "Woo valid!!"
return HttpResponse()
else: # GET
if ovramt is None:
o = Ovramt.objects.select_related(depth=1).latest("date_completed")
print "found?"
print o.id
else:
try:
o = Ovramt.objects.select_related(depth=1).get(id=ovramt)
except:
errors.append("OVRAMT NOT FOUND")
if o.residents.count() <= 0:
o.add_active_residents()
residents = list(o.residents)
型号.py
def add_active_residents(self):
ssa_res = SSA_Resident.objects.select_related(depth=1).filter(ssa=self.ssa, active=True)
for r in ssa_res:
self.residents.add(r.resident) # Fails Here
self.save()
添加活动的居民方法可以正常工作,直到从视图模块调用它为止。视图中是否有打开的数据库连接阻止从模型中写入数据?有人能解释为什么这个代码会出错吗?
最佳答案
在以下方法函数中
def add_active_residents(self):
ssa_res = SSA_Resident.objects.select_related(depth=1).filter(ssa=self.ssa, active=True)
for r in ssa_res:
self.residents.add(r.resident) # Fails Here
self.save()
为什么有选择相关?您只需要
ssa_res
项的FK。为什么要对相关项目进行其他查询?