python - 如何在 Django 的 DetailView 中拥有来自另一个模型的表单?
问题描述
我正在使用 Django,我想做的是有一个帖子的 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
- 应用
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
推荐阅读
- azure-devops - Azure DevOps API - git log 等效项
- angular - 显示空白屏幕的 Angular 应用程序
- webpack - 如何让 webpack 使用此配置自动为我的 scss 文件添加前缀?
- mysql - Drop Table 不会释放所有空间
- android - Android webview 加载数据错误 eglChooseConfig failed with error EGL_BAD_ATTRIBUTE
- c++ - 在 C++ 中提高 flatbuffers 性能
- python - ValueError:时间数据 '18-Aug-08' 与格式 '%d/%m/%Y' 不匹配(匹配)
- webmail - 如何在没有任何备份的情况下删除圆形立方体已删除的过去邮件?我只是删除了 cpanel 上的文件,他们错过了
- android - 在同一个按钮上播放和暂停音频 Kotlin
- generics - 扩展特征不匹配的 Groovy 泛型类型 - 不是有界参数的有效替代品