【发布时间】:2026-01-16 10:40:01
【问题描述】:
我有一个编辑表单,我只想更新帖子的“标题”、“内容”和“类别”。为此,我在保存表单时包含了update_fields。但是,这有一个小问题。当我提交表单时,Django 会引发 ValueError(特别是“无法在没有主键的情况下强制更新 save()”)。为什么会这样,我该如何解决?
发帖形式:
class PostForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for key in ['postTitle', 'postContent', 'category']:
self.fields[key].widget.attrs.update({'class': 'form-control'})
self.fields['content'].widget.attrs.update(width='100px', height='50')
class Meta:
model = Post
fields = ('title', 'content', 'category')
后模型:
class Post(models.Model):
title = models.CharField(max_length = 100)
URL = models.SlugField() # slug for url
content = models.TextField()
author = models.ForeignKey(User, on_delete = models.CASCADE, related_name = 'posts') # id of author
category = models.CharField(max_length = 9, default = 'General') # category the post is in
creationDate = models.DateTimeField()
编辑视图:
def editPost(request, pk):
if request.method == 'GET':
post = get_object_or_404(Post, pk = pk)
if post.author == request.user:
form = PostForm(instance = post)
return render(request, 'editPost.html', {'form': form, 'post': post})
else:
return redirect('viewPost', pk = pk, postURL = post.postURL)
if request.method == 'POST':
post = get_object_or_404(Post, pk = pk)
form = PostForm(request.POST)
if post.author == request.user:
if form.is_valid():
post = form.save(commit=False)
post.URL = slugify(post.postTitle)
post.save(update_fields = ['title', 'content', 'category', 'postURL'])
return redirect('viewAll')
【问题讨论】:
-
我之前没有使用过表单,但是您能确认是哪一行导致了这里的异常吗?是否可以在 post = form.save(commit=False) 行提出?
-
它是在 form.save() 的最后一行提出的
标签: django