Как сделать так, чтобы любой созданный мною объект сохранялся в моем проекте django?
Я работаю над простым приложением для чата, которое создает комнаты для пользователей, к которым они могут присоединиться. Вы вводите название комнаты, и приложение проверяет, существует ли уже такая комната. Если да, то вы перенаправляетесь в комнату. Если нет, приложение создает новую комнату, сохраняет ее и перенаправляет вас туда. Проблема заключается в сохранении созданной комнаты.
Я постоянно получаю ошибку "DoesNotExist". "Комната, соответствующая запросу, не существует". Вот код:
def check_view(request):
room_entity = request.POST['room_name']
username = request.POST['username']
if Room.objects.filter(name=room_entity).exists():
return redirect('/' + str(room_entity) + '/?username=' + str(username))
else:
new_room = Room.objects.create(name=room_entity)
new_room.save()
Room.save(new_room)
return redirect('/' + str(room_entity) + '/?username=' + str(username))
def room(request, room_info):
username = request.GET.get('username')
room_details = Room.objects.get(name=room_info)
return render(request, 'room.html', {
'username': username,
'room': room_info,
'room_details': room_details
})
room_details = Room.objects.get(name=room_info)
Если объект Room с именем room_info не существует в базе данных, вы получите эту ошибку.
Вместо этого вы можете сделать следующее:
try:
room = Room.objects.get(name=room_info)
except Room.DoesNotExist:
raise Http404("Given query not found....")
room_details, created = Room.objects.get_or_create(name=room_info)
Это получит комнату, если она существует, или создаст ее, если она не найдена. Первая переменная в возвращаемом кортеже - это реальный объект комнаты. Вторая - bool, чтобы узнать, была ли она создана (true) или уже существовала (false). Затем вы можете создать логику типа:
room_details, created = Room.objects.get_or_create(name=room_info)
if created:
enter code here to initiate a new room
else:
enter code here to handle a room that already exists.