我想在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 /
处的IntegrityErrorNOT NULL约束失败:my_app_tag.post_id
我正在使用Django 2.2,Python 3.6.8。
答案 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})