繁体   English   中英

如何在Django的DetailView中具有来自另一个模型的表单?

[英]How to have a Form from another Model inside a DetailView in Django?

我正在使用Django,并且我想要做的是拥有一个Posts的DetailView,并且在该细节视图内我想要一个带有用于发表评论的表单的评论部分。 当我加载详细视图时,它不会显示注释的形式,我正在使用基于类的视图作为表单的详细信息。 我的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>

这是因为DetailView不处理form_class 您可以在此处选择以下几种方式:

  • 通过get_context_data提供表格
  • DetailView上应用FormMixin (可以在django.view.generic.edit下找到)

上下文数据示例:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM