【发布时间】:2016-03-29 03:37:57
【问题描述】:
我无法将 cmets 添加到基于类的视图中, forms.py:
class RequestForm(ModelForm):
class Meta:
model = Request
exclude = ('slug',)
class RequestCommentForm(ModelForm):
class Meta:
model = RequestComment
fields = ['body' ]
models.py:
class Request(models.Model):
title = models.CharField(max_length=250 )
date = models.DateTimeField('Request date', default=timezone.now, editable=False )
department = models.CharField(max_length=2, choices=DEPARTMENT)
support_request = models.TextField('Request', max_length=2500, blank=True)
owner = models.ForeignKey(User,)
slug = models.SlugField(blank=True, editable=False)
def __unicode__(self):
return self.title
views.py:
class RequestDetailView(ModelFormMixin, DetailView):
model = Request
form_class = RequestCommentForm
def get_success_url(self):
return reverse('request-detail', kwargs={'pk': self.object.pk})
def get_context_data(self, **kwargs):
context = super(RequestDetailView, self).get_context_data(**kwargs)
context['form'] = self.get_form()
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):
form.instance.author = self.request.user
form.instance.request = Request.objects.get(pk=self.object.pk)
form.instance.created = timezone.now
form.save()
Also tried this part with:
self.object = form.save(commit=False)
self.object.author = self.request.user
self.object.request = Request.objects.get(pk=self.object.pk)
self.object.created = timezone.now
self.object.save()
return super(RequestDetailView, self).form_valid(form)
模板:request_detail.html cmets 部分.....
{% load bootstrap %}
<form action="{% url 'request-detail' object.id %}" method="post"> {% csrf_token %}
<ul class="form-group">
{{ form|bootstrap }}
</ul>
<input class="btn btn-primary" type="submit" value="Submit" />
</form>
.....
页面呈现正确,但是当我提交时,无法保存评论。
调试工具栏显示 sql 查询正在更新请求模型,而不是请求注释。
不知道如何将来自不同模型的简单评论表单添加到详细信息页面。 任何帮助将不胜感激。
另外,如果有更优雅的方式将 cmets 表单添加到基于类的视图中,我很乐意看到它。我的 google-fu 没有帮助我找到任何东西。
【问题讨论】:
-
在您的代码中:
orm.instance.request = Request.objects.get(pk=self.object.pk)应该是form.instance.request = Request.objects.get(pk=self.object.pk) -
这只是复制粘贴并删除评论##错字。已在原帖中修复。不是实际问题...
-
无法弄清楚如何用 CBV 做到这一点,使它与简单的功能视图一起工作..
标签: django django-class-based-views