Как сделать так, чтобы любой созданный мною объект сохранялся в моем проекте 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.
Вернуться на верх