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, когда хочешь убедиться, что выбранный тобой объект правильный