Джанго запрос не работает - PullRequest
0 голосов
/ 03 октября 2011

Вот в чем дело.У меня есть модель под названием Пользователь и счетчик атрибутов, который подсчитывает количество обращений к странице.Таким образом, если пользователь уже существует, я должен запросить БД и для этого пользователя только увеличить счетчик.В противном случае создайте нового пользователя.У меня досадная ошибка в методе 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 ]

3 голосов
/ 03 октября 2011

Django имеет потрясающую документацию по API QuerySet. https://docs.djangoproject.com/en/dev/ref/models/querysets/

get возвращает только 1 набор запросов. Если набор запросов не найден или возвращается более 1 набора запросов, возникает ошибка. Чтобы поймать эту конкретную ошибку, вы должны указать except User.MultipleObjectsReturned,

0 голосов
/ 03 октября 2011

Это означает, что в вашей базе данных есть несколько пользователей, соответствующих запросу. get должен использоваться для получения только одного. Кажется, вы уже кодируете это, но я думаю, что вы ловите неправильный тип исключения. Попробуйте изменить

except Statistic.DoesNotExist:

К

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