2011-10-03 8 views
0

여기 있습니다. User라는 모델과 페이지 액세스 수를 계산하는 속성 카운터가 있습니다. 그래서, 만약 사용자가 이미 존재한다면, 나는 db를 올려야하고 그 사용자 만 카운터를 증가시켜야합니다. 그렇지 않으면 새 사용자를 만듭니다. 나는 get 메소드에서 성가신 오류가있다. 어떻게 그것을 능가 할 수 있습니까? 장고 쿼리가 작동하지 않습니다.

if request.method == 'POST': 
     form = UserForm(request.POST) 
     if form.is_valid(): 
      u = form.save() 
      try: 
       obj = User.objects.get(user=u.user) 
       obj.counter += 1 
       obj.ipaddress = request.META['REMOTE_ADDR'] 
       obj.save() 
      except Statistic.DoesNotExist: 
       ip = request.META['REMOTE_ADDR'] 
       obj = User(user=u.user, counter=1, ipaddress=ip) 
       obj.save() 
      return {'status': 'OK'} 
     else: 
      return {'errors': form.errors} 
    return {'status': 'NOT OK. GET method'}
여기에 오류가 있습니다
get() returned more than one User -- it returned 2! Lookup parameters were

+2

당신의 성가신 오류가 무엇인가에

except Statistic.DoesNotExist: 

을 변경해보십시오? – dm03514

답변

3

장고는 자신의 QuerySet API에 대한 놀라운 문서를 가지고 있습니다. https://docs.djangoproject.com/en/dev/ref/models/querysets/

get은 정확히 1 개의 쿼리 세트 만 반환합니다. queryset이 ​​없거나 하나 이상의 queryset이 ​​리턴되면 오류가 발생합니다. 이 특정 오류를 잡으려면 except User.MultipleObjectsReturned,

0

이렇게하면 데이터베이스에 쿼리와 일치하는 사용자가 여러 명 있다는 의미입니다. get은 하나만 가져 오는 데 사용해야합니다. 당신이 이미 이것을 코딩하고있는 것으로 보이지만 잘못된 예외 유형을 잡는 것 같아요. 당신이 User.DoesNotExist` 제외하고`안?

from django.core.exceptions import DoesNotExist 
except DoesNotExist: 
+1

또는'User.DoesNotExist' –

+0

아, 네. 더 쉽습니다. –

+0

가독성이 향상되었습니다. 그냥 개인적인 선호 마음. –

관련 문제