У меня есть класс в views.py :
class PostCreateView(LoginRequiredMixin, CreateView):
model = Post
fields = ['title', 'content',]
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
Я хочу добавить объект в поля, но когда я пытаюсь добавить вот так:
fields = ['title', 'content', 'category']
отладчик отправляет журнал ошибок следующим образом:
FieldError at /post/new/
Unknown field(s) (category) specified for Post
Мне нужен дополнительный столбец для добавления поля category
при создании записи в моем блоге django.
Вот здесь blog_category.html
{% extends 'blog/base.html' %}
{% block content %}
<h1 class='mb-3'>Category: {{ category | title }}</h1>
{% for post in posts %}
<article class="media content-section">
<img class="rounded-circle article-img" src="{{ post.author.profile.image.url }}" alt="">
<div class="media-body">
<div class="article-metadata">
<a class="mr-2 author_title" href="{% url 'user-posts' post.author.username %}">@{{ post.author }}</a>
<small class="text-muted">{{ post.date_posted|date:"N d, Y" }}</small>
<div>
<small class="text-muted">
Categories:
{% for category in post.categories.all %}
<a href="{% url 'blog_category' category.name %}">
{{ category.name }}
</a>
{% endfor %}
</small>
</div>
</div>
<h2><a class="article-title" href="{% url 'post-detail' post.id %}">{{ post.title }}</a></h2>
<p class="article-content">{{ post.content|slice:200 }}...</p>
</div>
</article>
{% endfor %}
{% endblock content %}
models.py :
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
categories = models.ManyToManyField('Category', related_name='posts')
image = models.ImageField(upload_to='images', default="images/None/no-img.jpg")
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
class Category(models.Model):
name = models.CharField(max_length=20)
My post_form.html :
{% extends 'blog/base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content-section">
<form method="POST">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Blog Post</legend>
{{ form|crispy }}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Post</button>
</div>
</form>
</div>
{% endblock content %}
Основная цель:
создать поле category
в views.py -> после нажатия «Опубликовать» это поле должно перенести содержимое в админ-панель django и добавить категорию в сообщение. (как добавление заголовка и контента).
Если у кого-то есть готовое решение или вы знаете, как решить эту проблему, я был бы очень рад.