IntegrityError,NOT NULL 约束失败

IntegrityError, NOT NULL constraint failed

我想在我的 Django 应用程序中为帖子添加标签。

我可以通过管理界面添加标签,但是当我尝试通过我创建的表单添加标签时,我收到了 IntegrityError。

我在现有的题目中找不到同样错误的解决方案。我 运行 makemigrationsmigrate

来自 models.py

class Post(models.Model):
    title = models.CharField(null=False, blank=False)
    text = models.TextField()

class Tag(models.Model): 
    post = models.ForeignKey('my_app.Post', on_delete=models.CASCADE, related_name='tags')
    tag_text = models.CharField()

观点:

def post_add_tags(request, pk): 
    post= get_object_or_404(Post, pk=pk)
    if request.method == "POST": 
        form = TagForm(request.POST)
        if form.is_valid():
            tag = form.save()
            tag.post= post
            tag.save()
            return redirect("single_post_view", pk=post.pk)
    else: 
        form = TagForm()
    return render(request, "add_tags.html", {"form": form})

来自 forms.py 的表格:

class TagForm(forms.ModelForm): 
    class Meta:
        model = Tag
        fields = ["tag_text"]

模板:

<form method="POST"> {% csrf_token %}
    {{ form.as_p }}
    <button type="submit" class="save btn btn-default">Add tags</button>
</form>

错误:

IntegrityError at /post/4/add_tags/

NOT NULL constraint failed: my_app_tag.post_id

我使用的是 Django 版本 2.2,Python 3.6.8。

在设置所有必填字段之前不要 save form,特别是 foreign keys :

def post_add_tags(request, pk): 
    post= get_object_or_404(Post, pk=pk)
    if request.method == "POST": 
        form = TagForm(request.POST)
        if form.is_valid():
            tag = form.save(commit=False)
            tag.post= post
            tag.save()
            return redirect("single_post_view", pk=post.pk)
    else: 
        form = TagForm()
    return render(request, "add_tags.html", {"form": form})