Как получить данные для шаблона с FormMixin в сообщениях DetailView? - PullRequest
0 голосов
/ 14 мая 2018

У меня есть код ниже, и вы хотите знать, как отобразить сохраненные данные из формы в том же виде? У меня есть подробный вид сообщения и форма для ответа на это сообщение в том же виде, но как мне также отобразить данные, сохраненные из этой формы?

class PostDetailView(FormMixin, DetailView):
    model = Post
    form_class = AnswerForm
    template_name = 'main/postdetail.html'
    context_object_name = 'posts'


    def get_success_url(self):
       return reverse('postdetail', kwargs={'slug': self.object.slug})

    def get_context_data(self, **kwargs):
        context = super(PostDetailView, self).get_context_data(**kwargs)
        context['form'] = AnswerForm(initial={'post': self.object})
        return context

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        form = self.get_form()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

    def form_valid(self, form):
        instance = form.save(commit=False)
        instance.created_by = self.request.user
        instance.post = self.object
        instance.save()
        return super(PostDetailView, self).form_valid(form)

Моя модель

class Answer(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE,)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE,)
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)
    content = models.TextField()

1 Ответ

0 голосов
/ 14 мая 2018

Вы перенаправляете после успешного запроса на публикацию, поэтому вы не можете отобразить данные формы.

Похоже, что перенаправление вернулось к подробному виду публикации.В шаблоне вы можете отобразить похожие ответы вместе с сообщением:

{{ posts }}
{% for answer in posts.answer_set.all %}
    {{ answer.created_by }}
    {{ answer.content }}
{% endfor %}

Использование context_object_name = 'posts' сбивает с толку, поскольку вы отображаете детали для одного post.Я предлагаю вам изменить представление на:

class PostDetailView(FormMixin, DetailView):
    model = Post
    form_class = AnswerForm
    template_name = 'main/postdetail.html'
    context_object_name = 'post'  # or just remove this line since the default will be 'post'

Тогда вы бы отобразили связанные ответы в шаблоне с:

{{ post }}
{% for answer in post.answer_set.all %}
    {{ answer.created_by }}
    {{ answer.content }}
{% endfor %}
...