Как вызвать исключения в представлении Django на основе исключений ORM - PullRequest
0 голосов
/ 08 марта 2020

Вместо этого, например, это:

views.py:

my_noob_way(request):
    object = Object.objects.filter(name=request.POST.get('name', None))
    if not object:
        Object.objects.create(name=request.POST.get('name', None))
        data = {'success': True, 'message': 'Object successfully created.'}
    else:
        data = {'success': False, 'message': 'Object already exists.'}
    return JsonResponse(data)

Вместо этого я хочу избежать строки filter (дополнительный запрос мусора) и просто выполнить create внутри try и перехватить возможное исключение дублирования с помощью except. Как я могу это сделать? Я не знаю, что ставить после except: (слишком широкое исключение).

1 Ответ

1 голос
/ 08 марта 2020

Вы можете использовать get_or_create

my_noob_way(request):
    object, created = Object.object.get_or_create(name=request.POST.get('name', None))
    message = 'Object successfully created.' if created else 'Object already exists.'
    return JsonResponse({'success': created, 'message': message})
...