python - django.db.utils.IntegrityError:NOT NULL 约束失败:home_post.author_id
问题描述
我已经建立了一个使用 Ajax 发布的表单,但是,当我单击提交按钮时,我得到了错误:
django.db.utils.IntegrityError: NOT NULL constraint failed: home_post.author_id
我不知道这是什么,因为之前我有一个单独的 html 来创建帖子,但是在使用 Ajax 之后我收到了这个错误。
这是我的帖子模型:
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField(validators=[MaxLengthValidator(250)])
author = models.ForeignKey(Profile, on_delete=models.CASCADE)
date_posted = models.DateTimeField(auto_now_add=True)
last_edited= models.DateTimeField(auto_now=True)
likes= models.ManyToManyField(Profile, blank=True, related_name='post_likes')
这是我的帖子表格:
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ('title','content',)
这是我的 create_post 视图:
@login_required
def post_create(request):
data = dict()
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
form.save()
data['form_is_valid'] = True
posts = Post.objects.all()
data['posts'] = render_to_string('home/homepage/home.html',{'posts':posts})
else:
data['form_is_valid'] = False
else:
form = PostForm
context = {
'form':form
}
data['html_form'] = render_to_string('home/posts/post_create.html',context,request=request)
return JsonResponse(data)
这是我的 Ajax Javascript 代码:
$(document).ready(function(){
var ShowForm = function(){
var btn = $(this);
$.ajax({
url: btn.attr("data-url"),
type: 'get',
dataType:'json',
beforeSend: function(){
$('#modal-post').modal('show');
},
success: function(data){
$('#modal-post .modal-content').html(data.html_form);
}
});
};
var SaveForm = function(){
var form = $(this);
$.ajax({
url: form.attr('data-url'),
data: form.serialize(),
type: form.attr('method'),
dataType: 'json',
success: function(data){
if(data.form_is_valid){
$('#post-list div').html(data.posts);
$('#modal-post').modal('hide');
} else {
$('#modal-post .modal-content').html(data.html_form)
}
}
})
return false;
}
//create
$('.create-post-btn').click(ShowForm);
$('#modal-post').on("submit",".post-create-form",SaveForm)
//update
$('#post-list').on("click",".show-form-update",ShowForm);
$('#modal-post').on("submit",".update-form",SaveForm)
//delete
$('#post-list').on("click",".show-form-delete",ShowForm);
$('#modal-post').on("submit",".delete-form",SaveForm)
});
我不知道是什么导致了这个错误,因为一切对我来说似乎都是正确的。
解决方案
在 Post 的模型中,作者不为空。但是在视图中,您在保存表单之前没有设置作者。
您可以添加现有的作者 ID 以在视图中发布。
post = form.save(False)
post.author = author_id
post.save()
推荐阅读
- firebase - Firebase 托管与存储 - 使用 CDN 提供图像
- python-3.x - 循环通过金融股票代码列表
- ionic-framework - 来自 Internet 的自定义 Ionic 图标
- python - 在 Python 中创建 HTTPS 代理服务器
- xslt - WiX 安装程序:将 xslt 与 heat.exe 一起使用时,如何在还使用匹配属性时找到匹配的子字符串?
- ios - 如果条件不适用于 iOS tableview ToDo 应用程序中的文本删除线
- unity3d - 将统一 .fbx 模型导入搅拌机时,电枢变得不成比例且过大
- css - CSS GRID 无法按顺序重新排列项目:;
- visual-studio - 安装 SQLite NuGet 包会安装包,但参考不可用。VS2019 社区
- r - 有没有一种简单的方法可以在不使用 dplyr::select() 的情况下订购大量列?