Как добавить дополнительное поле категории в django.views.generic - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть класс в 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:&nbsp;
          {% for category in post.categories.all %}
          <a href="{% url 'blog_category' category.name %}">
            {{ category.name }}
          </a>&nbsp;
          {% 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 и добавить категорию в сообщение. (как добавление заголовка и контента).

Если у кого-то есть готовое решение или вы знаете, как решить эту проблему, я был бы очень рад.

1 Ответ

0 голосов
/ 07 ноября 2019
fields = ['title', 'content', 'categories']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...