2015-10-19 120 views
0

学习如何使用Django。我想这样的代码:Django - 根据查询更新或插入

if form.is_valid() and form.has_changed(): 
    try: 
     p = profile.objects.get(user_id= user.id) 
     #Append data to profile record 
        profile_record.save() 
    except p.DoesNotExist as e: 
     #Create new profile record 
     profile_record.save() 

user_id(FK场)未找到我得到一个错误:

local variable 'p' referenced before assignment

我认为p = ...是分配?

谢谢你对我在做什么错误的任何指针。

+0

什么是'p',什么是'profile_record'? – Wtower

回答

0

试图筛选。获得应该总是在情况下使用你知道有将在查询时仅一个对象的查询..

if form.is_valid() and form.has_changed(): 
     p = profile.objects.filter(user_id = user.id) 
     if p: 
      p = p[0] 
      #Append data to profile record 
      profile_record.save() 
     else: 
      #Create new profile record 
      profile_record.save() 

获得(场=东西)总是会抛出错误,如果没有结果,或超过1分的结果,而.filter()不能在这些情况下抛出错误。

+0

谢谢 - 也发现这个有用 – Chas

3

您的错误发生是因为p是在try部分中第一次设置的。 On除外,你引用p,但p在这一点上还没有被分配到任何东西,因为如果达到except,那么try部分就是“undone”,这就是p被赋值的地方。

尝试改变except p.DoesNotExist as e:except Person.DoesNotExist:

+0

谢谢Zabari - 你的回答让我明白我的错误。 – Chas

0

为什么不使用

if form.is_valid() and form.has_changed(): 
    form.save()