2016-09-15 18 views
0

以下代码是否正确?在执行try/except块之后,e应该在每次迭代开始时引用一个新对象。我怀疑有一些干扰旧对象,因为现在有一个我现在无法再现的错误。Django循环中的模型参考分配

from webapp.models import Profile 

.... 
    for e in Profile.objects.all(): 
     if not e.profile_link in profile_data: 
      e.delete() 

    try: 
     for key, employee in profile_data.iteritems(): 
      #e still holds old reference 
      try: 
       #edit DB object if exists 
       e = Profile.objects.all().filter(profile_link=key)[0] 
      except Exception: 
       #or create a new one 
       e = Profile(profile_link=key) 

      #modify e using employee 

      e.save() 
    except Exception: 
     #handle exception 
+0

你的意思是将try/except块缩进到for循环之外? – souldeux

+1

不好有未定义的异常。让它失败,了解异常发生的情况,并处理这些问题 –

+0

可能没有错误。你应该做一个函数调用'e.save()'而不是'e.save' – machaku

回答

0

如果你想把所有的try/catch块用于循环,你需要确保你的identation是正确之内运行

尝试(检查压痕)

from webapp.models import Profile 

.... 
for e in Profile.objects.all(): 
    if not e.profile_link in profile_data: 
     e.delete() 
    try: 
     for key, employee in profile_data.iteritems(): 
      #e still holds old reference 
      try: 
       #edit DB object if exists 
       e = Profile.objects.get(profile_link=key) 
      except Exception: 
       #or create a new one 
       e = Profile(profile_link=key) 

      #modify e using employee 

      e.save() 
    except Exception: 
     #handle exception