【问题标题】:django.db.utils.IntegrityError: NOT NULL constraint failed: home_post.author_iddjango.db.utils.IntegrityError:NOT NULL 约束失败:home_post.author_id
【发布时间】:2020-07-04 11:56:34
【问题描述】:

我已经建立了一个使用 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)
});

我不知道是什么导致了这个错误,因为一切对我来说似乎都是正确的。

【问题讨论】:

    标签: python django ajax django-models django-forms


    【解决方案1】:

    在 Post 的模型中,作者不为空。但是在视图中,您在保存表单之前没有设置作者。

    您可以添加现有的作者 ID 以在视图中发帖。

    post = form.save(False)
    post.author = author_id
    post.save()
    

    【讨论】:

    • 您好,感谢您的回复,这是否意味着我还必须为帖子添加其他字段,例如手动创建的日期?不会自动添加吧? @yanqzhi
    • 你应该阅读 Django 的文档。应该设置喜欢的字段,因为它是空白字段,而不是空字段。 date_posted 和 last_edited 字段将由 Django 自动设置,因此您不必设置它们。
    猜你喜欢
    • 2020-06-08
    • 2018-12-24
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    相关资源
    最近更新 更多