Django создает два объекта вместо одного

Я хочу создать объект с передачей некоторых данных из другой модели. И это работает хорошо, но вместо создания одного объекта модели, я получил два объекта. Я создаю один объект и пытаюсь его изменить, но сохраняется два объекта, созданный и измененный. Я хочу сохранить только один объект, который был изменен.

просмотров

topic = Topic.objects.get(id=pk)
room = Room.objects.create(topic=topic)
form = RoomForm(request.POST, instance=room)
if request.method == 'POST':
    if form.is_valid(): 
        room = form.save(commit=False)
        room.host=request.user
        room.save()
        return redirect('home')

Не создавайте объект самостоятельно, пусть это сделает форма. При вашем подходе вы создаете один объект в GET-запросе и один в POST-запросе:

def my_view(request, pk):
    topic = Topic.objects.get(id=pk)
    # no create
    if request.method == 'POST':
        form = RoomForm(request.POST)
        if form.is_valid():
            form.instance.topic_id = pk
            form.instance.host = request.user
            form.save()
            return redirect('home')
    else:
        form = RoomForm()
    # …

если вы хотите изменить объект, созданный ранее, просто сделайте следующее. выполните поиск в вашей модели и обновите нужное вам поле

Topic.objects.filter(id=pk).update(fields = something)

вот и все. Помни, используй if, когда хочешь убедиться, что выбранный тобой объект правильный

Вернуться на верх