IntegrityError,NOT NULL约束失败

时间:2019-06-11 12:34:28

标签: django django-models integrity

我想在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>

错误:

  

/ post / 4 / add_tags /

处的IntegrityError      

NOT NULL约束失败:my_app_tag.post_id

我正在使用Django 2.2,Python 3.6.8。

1 个答案:

答案 0 :(得分:0)

在设置所有必填字段(特别是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})