错误:NOT NULL约束失败:posts_post.author_id

时间:2020-08-27 17:17:25

标签: django-models django-forms django-views

我正在创建一个博客应用,但遇到一个问题,我找不到任何地方的答案。我是django的初学者。

因此,我在应用程序上有一个页面,用户可以在其中创建新帖子。当我填写区域并按确认时,出现错误NOT NULL constraint failed: posts_post.author_id。它说我的form.save()文件中有views.py个例外。

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)

forms.py

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...'
            })
        }

models.py

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

new-post.html

{% 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 %}

0 个答案:

没有答案