84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
学习是最好的投资!
Django 无需「显式地定义主键」
它会自动为表添加一个 id 字段( 主键, 自增 )
可以考虑把你手动定义的主键去掉
需要看清楚,你的post对象是PostForm()而非Post(),你的PostForm表单处理对象有id初始值,但是你传来的request.POST值有没有id值呢,没有就自然是None了,你这个post如果是Post()对象,那么肯定是有id值的
有一个信息不详细没给出,就是 PostForm 你是如何定义的。
PostForm
如果你这么定义PostForm,通过调用PostForm(request.POST).save()是可以得到你想要的结果的。
PostForm(request.POST).save()
class PostForm(forms.ModelForm): class Meta: model = Post
不过你的PostForm肯定不是这么定义的,因为post = form.save(request.user)是错误的使用方法,ModelForm的save方法只有一个参数,就是commit = False 或者 commit=True,表示是否将数据保存到数据库,默认True.
post = form.save(request.user)
ModelForm
save
commit = False
commit=True
源码见链接
Django 无需「显式地定义主键」
它会自动为表添加一个 id 字段( 主键, 自增 )
可以考虑把你手动定义的主键去掉
需要看清楚,你的post对象是PostForm()而非Post(),你的PostForm表单处理对象有id初始值,但是你传来的request.POST值有没有id值呢,没有就自然是None了,你这个post如果是Post()对象,那么肯定是有id值的
有一个信息不详细没给出,就是
PostForm
你是如何定义的。如果你这么定义
PostForm
,通过调用PostForm(request.POST).save()
是可以得到你想要的结果的。不过你的PostForm肯定不是这么定义的,因为
post = form.save(request.user)
是错误的使用方法,ModelForm
的save
方法只有一个参数,就是commit = False
或者commit=True
,表示是否将数据保存到数据库,默认True.源码见链接