我正在创建一个博客应用,但遇到一个问题,我找不到任何地方的答案。我是django的初学者。
因此,我在应用程序上有一个页面,用户可以在其中创建新帖子。当我填写区域并按确认时,出现错误NOT NULL constraint failed: posts_post.author_id
。它说我的form.save()
文件中有views.py
个例外。
from django.shortcuts import render, redirect
from .models import Post
from .forms import PostForm
# Create your views here.
def index(request):
posts = Post.objects.order_by('created_on')
return render(request, 'posts/list.html', {'title': 'Home page', 'posts': posts})
def about(request):
return render(request, 'posts/about.html', {'title': 'About page'})
def newPost(request):
error = ''
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
form.save()
return redirect('home')
else:
error = 'Incorrect form'
form = PostForm()
context = {
'form': form,
'error': error
}
return render(request, 'posts/new-post.html', context)
from .models import Post
from django.forms import ModelForm, TextInput, Textarea
class PostForm(ModelForm):
class Meta:
model = Post
fields = ['title', 'content']
widgets = {
'title': TextInput(attrs={
'class': 'form-control',
'placeholder': 'Enter title...'
}),
'content': Textarea(attrs={
'class': 'form-control',
'placeholder': 'Enter content...'
})
}
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
STATUS = (
(0, 'Draft'),
(1, 'Published')
)
class Post(models.Model):
title = models.CharField(max_length=50)
slug = models.SlugField(max_length=30, unique=True)
author = models.ForeignKey(
User, on_delete=models.CASCADE, related_name='blog_posts', default=None)
content = models.TextField()
updated_on = models.DateTimeField(auto_now=True)
created_on = models.DateTimeField(auto_now_add=True)
status = models.IntegerField(choices=STATUS, default=0)
class Meta:
ordering = ['-created_on']
verbose_name = 'Post'
verbose_name_plural = 'Tasks'
def __str__(self):
return self.title
{% extends 'posts/base.html' %}
{% block title %}
New Post
{% endblock %}
{% block content %}
<h5>Make a new post</h5>
<form method="post">
{% csrf_token %}
{{ form.title }}</br>
{{ form.content }}</br>
<button type="submit" class="btn btn-success">Confirm</button>
<span>{{ error }}</error>
</form>
{% endblock %}