【发布时间】:2023-03-29 22:50:01
【问题描述】:
我想为我的 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>
错误:
/post/4/add_tags/ 处的完整性错误
NOT NULL 约束失败:my_app_tag.post_id
我使用的是 Django 2.2 版,Python 3.6.8。
【问题讨论】:
-
这一行
tag = form.save(),应该是tag = form.save(commit=False)
标签: django django-models integrity