Как я могу получить (текст) значение вместо числа в поле множественного выбора? - PullRequest
0 голосов
/ 24 мая 2019

У меня есть класс 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 %}

Итак, когда я перенаправляю на вновь созданную тему / тему, это работает, но я не могу сделать то же самое для новых сообщений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...