Vous devez voir clairement que votre objet post est PostForm() et non Post(). Votre objet de traitement de formulaire PostForm a une valeur d'identifiant initiale, mais la valeur request.POST que vous transmettez a-t-elle une valeur d'identifiant ? sera naturel. C'est None. Si votre message est un objet Post(), alors il doit avoir une valeur d'identifiant
Il y a une information qui n'est pas donnée en détail, c'est PostForm comment vous la définissez.
Si vous définissez PostForm ainsi, vous pouvez obtenir le résultat souhaité en appelant PostForm(request.POST).save().
class PostForm(forms.ModelForm):
class Meta:
model = Post
Mais votre PostForm n'est certainement pas défini de cette façon, car post = form.save(request.user) n'est pas la bonne façon de l'utiliser. La méthode ModelForm de save n'a qu'un seul paramètre, qui est commit = False ou commit=True, indiquant. s'il faut enregistrer les données dans la base de données, par défaut True
Django ne nécessite pas de "définir explicitement des clés primaires"
Il ajoutera automatiquement un champ d'identification (clé primaire, incrémentation automatique) à la table
Vous pouvez envisager de supprimer la clé primaire que vous avez définie manuellement
Vous devez voir clairement que votre objet post est PostForm() et non Post(). Votre objet de traitement de formulaire PostForm a une valeur d'identifiant initiale, mais la valeur request.POST que vous transmettez a-t-elle une valeur d'identifiant ? sera naturel. C'est None. Si votre message est un objet Post(), alors il doit avoir une valeur d'identifiant
.Il y a une information qui n'est pas donnée en détail, c'est
PostForm
comment vous la définissez.Si vous définissez
PostForm
ainsi, vous pouvez obtenir le résultat souhaité en appelantPostForm(request.POST).save()
.Mais votre PostForm n'est certainement pas défini de cette façon, car
.post = form.save(request.user)
n'est pas la bonne façon de l'utiliser. La méthodeModelForm
desave
n'a qu'un seul paramètre, qui estcommit = False
oucommit=True
, indiquant. s'il faut enregistrer les données dans la base de données, par défaut TrueVoir le lien pour le code source