Как получить форму из другой модели внутри DetailView в Django? - PullRequest
0 голосов
/ 08 апреля 2019

Я работаю с Django, и я хочу иметь подробный вид сообщений, а внутри этого подробного вида я хочу раздел комментариев с формой для комментариев сообщений. Когда я загружаю подробный вид, он не показывает форму комментариев. Я использую представления на основе классов для подробностей формы. Мой models.py выглядит так:

class Post(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
title = models.CharField(max_length = 200)
text = models.TextField()
created_date = models.DateTimeField(default = timezone.now)
likes = models.IntegerField(default=0)
tags = models.CharField(max_length = 50, default = '' )

def get_absolute_url(self):
    return reverse('blog:post_list')

def __str__(self):
    return self.title

class Comments(models.Model):
    post = models.ForeignKey('blog.Post', related_name='comments', on_delete=models.CASCADE)
    text = models.TextField()
    created_date = models.DateTimeField(default = timezone.now)

views.py выглядит так:

class PostDetailView(DetailView):
    form_class = CommentsForm
    model = Post

Форма выглядит так:

   class CommentsForm(forms.ModelForm):
        class Meta:
            model = Comments
            fields = ('text',)

            widgets = {
                'text' : forms.Textarea(attrs={'class':'comment-textarea'})
            }

И comments_form.html выглядит так:

<div class="container">
    <div class="row">
        <div class="col">
            <h1>Estoy siendo insertado</h1>
            <form action="" method="POST">
                {%csrf_token%}
                {{ form.as_p }}
                <input type="submit" class="btn mt-2 btn-comments" value="Comment">
            </form>
        </div>
    </div>
</div>

1 Ответ

1 голос
/ 08 апреля 2019

Это потому, что DetailView не обрабатывает form_class.У вас есть несколько вариантов здесь:

  • предоставить форму через get_context_data
  • применить FormMixin к DetailView.(Можно найти под django.view.generic.edit)

Пример контекстных данных:

def get_context_data(self, **kwargs):
    context = super(PostDetailView, self).get_context_data(**kwargs)
    context['comments_form'] = CommentsForm()
    return context
...