【发布时间】:2020-05-08 23:53:20
【问题描述】:
我有一个创建博客文章的 Django 表单,但是表单在提交时会抛出异常。奇怪的是,他们仍然创建这些帖子,我可以在其他页面上查看这些帖子。这是我的 models.py、views.py、form.py 代码和堆栈跟踪。
模型.py
from django.db import models
from django.utils import timezone
from django.contrib.auth import get_user_model
User = get_user_model()
class Author(models.Model):
""" Inherits the auth user model """
user = models.OneToOneField(User, on_delete=models.CASCADE)
def __str__(self):
return self.user.username
class Category(models.Model):
""" Generic entries so posts can be filtered """
title = models.CharField(max_length=20)
def __str__(self):
return self.title
class News_Post(models.Model):
""" Inherits Category & Author Models """
title = models.CharField(max_length=100)
content = models.TextField()
date_posted = models.DateTimeField(default=timezone.now)
date_modified = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
categories = models.ManyToManyField(Category)
featured = models.BooleanField()
post_img = models.ImageField(default='default.jpg')
def __str__(self):
return self.title
Forms.py:
from .models import News_Post
from django import forms
class News_Post_Form(forms.ModelForm):
""" Form responsible for creating new posts. """
id = None
content = forms.CharField()
categories = forms.CharField()
featured = forms.BooleanField()
post_img = forms.ImageField()
class Meta:
model = News_Post
fields = [
'title',
'content',
'categories',
'featured',
'post_img',
]
Views.py
from django.shortcuts import render, redirect
from .models import News_Post, Author
from .forms import News_Post_Form
from django.contrib.auth.decorators import login_required
from django.views.generic import CreateView
def get_author(user):
"""Gets the author"""
ath= Author.objects.filter(user=user)
if ath.exists():
return ath[0]
return None
class PostCreateView(CreateView):
"""Generic post view """
model = News_Post
template_name = 'create_post.html'
form_class = News_Post_Form
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = 'Create'
return context
def form_valid(self, form):
form.instance.author = get_author(self.request.user)
form.save()
@login_required
def news_post_create(request):
""" Creates new posts """
title = 'Create a new post.'
author = get_author(request.user)
form = News_Post_Form(request.POST or None, request.FILES or None)
if request.method == 'POST':
if form.is_valid():
form.instance.author = author
form.clean()
form.save()
return redirect('blog/posts.html')
context = {
'title': title,
'form': form,
}
return render(request, 'blog/create_post.html', context)
@login_required
def news_post(request):
""" Renders the 'News_Post' model. """
query = News_Post.objects.filter(featured=True)
context = {
'obj_list': query
}
return render(request, 'blog/posts.html', context)
不想用大量的文字堵塞帖子,所以为了便于阅读,我使用了 Django 的堆栈跟踪共享功能:Stack trace
我不明白字符 'r' 的来源,因为它仍在更新数据库,有人能解释一下为什么会这样吗?另外,我还尝试了以下操作: ValueError: Field 'id' expected a number but got 'Processing'
【问题讨论】:
-
所以它正在使用正确的 ID 填充作者?
-
@WombatPM 是的,ID 值都相应匹配。他们还将相关的用户名呈现给实际的模板。
-
它是否可能来自以前的迁移?可能会删除除 init.py 之外的所有迁移并进行迁移和迁移。为我工作
-
不,我已经删除了这些迁移,但它仍然不起作用
标签: python django python-3.x django-models django-forms