У меня есть класс CreateView, и я пытаюсь использовать входные данные из поля с множественным выбором, которое у него есть, как часть success_url.
Он работает в моем классе TopicCreateView, потому что входные данные представляют собой поле char, но когда я пытаюсь заставить его работать с PostCreateView, он возвращает KeyError. Из того, что я понимаю, это потому, что он возвращает значение поля множественного выбора (1, 2, 3 и т. Д.) Вместо текста между тегами опции.
Тема работает нормально.
views.py
class TopicCreateView(LoginRequiredMixin, CreateView):
model = Topic
template_name = 'topic_form.html'
fields = ['board', 'title']
success_url = '/topic/{title}'
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
А вот и models.py
class Topic(models.Model):
title = models.CharField(max_length=100, unique=True)
board = models.ForeignKey(Board, default='ETC', on_delete=models.SET_DEFAULT)
date_published = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.title
Вот то, что я не могу заставить работать, Почта.
views.py
class PostCreateView(LoginRequiredMixin, CreateView):
model = Post
template_name = 'post_form.html'
fields = ['topic', 'content']
success_url = '/topic/{topic}'
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
и models.py
class Post(models.Model):
content = models.TextField()
author = models.CharField(max_length=200, default='Unknown', blank=True, null=True)
date_published = models.DateTimeField(default=timezone.now)
topic = models.ForeignKey(Topic, default=content, on_delete=models.SET_DEFAULT)
def __str__(self):
return self.topic
Кроме того, форма одинакова для них обоих:
{% extends '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">Create A New Post</legend>
{{ form | crispy }}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Submit</button>
</div>
</form>
</div>
{% endblock %}
Итак, когда я перенаправляю на вновь созданную тему / тему, это работает, но я не могу сделать то же самое для новых сообщений.