Django: преобразование функции представления в представление на основе класса. Ошибка при входе в панель администратора: соответствующий запрос не существует
Я учусь преобразовывать старые функции view.py в представления на основе классов.
Я начал с простой функции, которая отображала страницу с моими эссе, плюс у меня была форма newsletter form и проект формы comment form (но не привязанный к DB). Я решил не развивать эту форму комментариев дальше в простой функции, а перестроить всю ее на class-based view, чтобы изучить лучший и более чистый подход.
Я столкнулся с проблемой, которую понятия не имею, как решить. Ошибка: соответствующий запрос не существует. И Exception Value: EssayCls matching query does not exist. Скорее всего, я нарушаю логику, которая соединяет мою модель с моей БД.
Я ищу предложения о том, как решить проблемы в моем коде, и предложения по темам, о которых я должен узнать больше, чтобы сделать этот вид разработки менее обременительным.
До того, как я перестроил свое представление, все работало нормально и выглядело следующим образом:
views.py:
models.py:
class Tag(models.Model):
caption = models.CharField(max_length=100)
def __str__(self):
return self.caption
class Meta:
ordering = ['caption']
class EssayCls(models.Model):
title = models.CharField(max_length=200)
organizer_email = models.EmailField(null=True)
date = models.DateField(null=True)
slug = models.SlugField(unique=True, DB_index=True)
description = models.TextField(MinLengthValidator(10))
details = models.TextField()
image = models.ImageField(upload_to='images')
video = models.ForeignKey(VideoObject, blank=True, null=True, on_delete=models.SET_NULL, related_name="video_obj") # One-to-many relationship
language = models.ForeignKey(ProgLang, null=True, on_delete=models.SET_NULL) # One-to-many relationship
guest = models.ManyToManyField(SendMeMessage, blank=True)
tags = models.ManyToManyField(Tag)
class Meta:
verbose_name = "My Essay"
class Comment(models.Model):
user_name = models.CharField(max_length=120)
user_email = models.EmailField()
text = models.TextField(max_length=2300)
post = models.ForeignKey(
EssayCls,
on_delete=models.CASCADE,
related_name="comments"
)
forms.py:
class UserFeeDBack(forms.Form):
email = forms.EmailField(label='Your email') # 'Your email' is html label form templates.
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
exclude = ["post"]
labels = {
"user_name": "Your name",
"user_email": "Your email",
"text": "Your Comment"
}
После того, как я хэшировал (в views.py) свою старую функцию my_essays
и преобразовал ее в представление на основе класса MyEssaysView. На данный момент это выглядит следующим образом:
Журнал ошибок: