使用表单创建和更新模型对象
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()
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()