Django 和 Sqlite 并发问题

Jos*_*ton 5 python sqlite django concurrency

我已经阅读了一些与 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)
Run Code Online (Sandbox Code Playgroud)

模型.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()
Run Code Online (Sandbox Code Playgroud)

add_active_residents 方法工作正常,直到从视图模块调用它为止。视图中是否存在与数据库打开的连接,该连接阻止从模型写入?有人能解释为什么这段代码会出错吗?

S.L*_*ott 5

在下面的方法函数中

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()
Run Code Online (Sandbox Code Playgroud)

为什么会有select_相关呢?你真正需要的只是物品的 FK ssa_res。为什么要对相关项目进行额外查询?