IntegrityError,NOT NULL 约束失败
IntegrityError, NOT NULL constraint failed
我想在我的 Django 应用程序中为帖子添加标签。
我可以通过管理界面添加标签,但是当我尝试通过我创建的表单添加标签时,我收到了 IntegrityError。
我在现有的题目中找不到同样错误的解决方案。我 运行 makemigrations
和 migrate
。
来自 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})
我想在我的 Django 应用程序中为帖子添加标签。
我可以通过管理界面添加标签,但是当我尝试通过我创建的表单添加标签时,我收到了 IntegrityError。
我在现有的题目中找不到同样错误的解决方案。我 运行 makemigrations
和 migrate
。
来自 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})