使用表单创建和更新模型对象

Creating and updating Model object using form

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 对象提供,因此表单应该更新上面创建的 post 但它正在创建另一个 PostModel 对象并自行插入到数据库中。所以有两个 post 开始创建并插入数据库,第一个是因为 post = PostModel(user=request.user) 我不知道为什么要创建第二个. 为什么会这样?

问题出在视图的前两行

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

当他们使用 user=currentuser 创建一个 PostModel 对象时

要将 post 添加到用户,请执行以下操作而不是 form.save()

post = form.save(commit=False)
post.user = request.user
post.save()