Не работает страничка с формой. Пытаюсь сделать форму без Meta класса. При попытке перейти на страницу создания высвечивается ошибка
forms.py
from django import forms
from django.core.exceptions import ValidationError
from .models import Post, Category
# class PostForm(forms.ModelForm):
# class Meta:
# model = Post
# fields = [
# 'post_category',
# 'title',
# 'text',
# ]
class PostForm(forms.Form):
title = forms.CharField(label='Заголовок')
text = forms.CharField(label='Текст')
category_type = forms.ModelChoiceField(label='Метка', queryset=Post.objects.all())
post_category = forms.ModelChoiceField(label='Категория', queryset=Post.objects.all())
def clean(self):
cleaned_data = super().clean()
title = cleaned_data.get("title")
text = cleaned_data.get("text")
if title is not None and len(title) < 20:
raise ValidationError({
"title": "Описание не может быть менее 20 символов."
})
if title[0].islower():
raise ValidationError({
"title": "Описание не может начинаться с маленькой буквы."
})
if text == title:
raise ValidationError(
"Описание не должно быть идентично тексту поста."
)
return cleaned_data
model.py
class Post(models.Model):
post_author = models.ForeignKey(Author, on_delete=models.CASCADE)
NEWS = 'NW'
ARTICLE = 'AR'
CATEGORY_CHOICES = (
(NEWS, 'Новость'),
(ARTICLE, 'Статья'),
)
category_type = models.CharField(max_length=2, choices=CATEGORY_CHOICES, default=ARTICLE)
date_creation = models.DateTimeField(auto_now_add=True)
post_category = models.ManyToManyField(Category, through='PostCategory')
title = models.CharField(max_length=128)
text = models.TextField()
rating = models.SmallIntegerField(default=0)
def like(self):
self.rating += 1
self.save()
def dislike(self):
self.rating -= 1
self.save()
def preview(self):
return self.text[0:48] + '...'
def count(self):
count = 0
count += 1
return count
def __str__(self):
return self.title.title()