Создание и обновление объекта 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()
