Создание и обновление объекта Model с помощью формы

models.py

class PostModel(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    date_time = models.DateTimeField(auto_now_add=True)
    title = models.TextField(null=True)
    body = models.TextField(null=True)
    def __str__(self):
        return str(self.user)

class ImagesPostModel(models.Model):
    post = models.ForeignKey(PostModel, on_delete=models.CASCADE)
    images = models.ImageField(null=True, blank=True)

views.py

def post(request):
    post = PostModel(user=request.user)
    post.save()
    if request.method == 'POST':
        form = PostModelForm(request.POST, instance=post)
        images = request.FILES.getlist('images')
        for image in images:
            ImagesPostModel.objects.create(post=post, images=image)
        if form.is_valid():
            form.save()
        return redirect('/Blog/home/')
    else:
        form = PostModelForm(request.POST)
        return render(request, 'post.html', {'form': form})

Я создал объект PostModel post и сохранил его в базе данных с помощью метода save(). В форме я указал параметр экземпляра как объект post, поэтому форма должна обновлять созданный выше пост, но она создает другой объект PostModel и сама вставляет его в базу данных. То есть создаются и вставляются в базу данных два поста, первый создается из-за post = PostModel(user=request.user) и я не знаю, почему создается второй. Почему это происходит?

Проблема заключается в первых 2 строках в представлении

post = PostModel(user=request.user)
post.save()

Как они создают PostModel obj с user=currentuser

Чтобы добавить пост пользователю, сделайте следующее, а не form.save()

post = form.save(commit=False)
post.user = request.user
post.save()
Вернуться на верх