学习是最好的投资!
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()是可以得到你想要的結果的。
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(request.POST).save()
是可以得到你想要的結果的。不過你的PostForm絕對不是這麼定義的,因為
post = form.save(request.user)
是错误的使用方法,ModelForm
的save
方法只有一个参数,就是commit = False
或者commit=True
,表示是否將資料儲存到資料庫,預設True.源碼請見連結