2015-12-22 8 views
1

У меня возникли проблемы с добавлением комментариев к взглядам на основе класса, forms.py:Django класс на основе просмотр и комментарии

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 комментарии раздел .....

{% 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> 

.....

страница не отображается правильно, но когда я представляю, не годна с сохранением комментария.

Панель инструментов Debug показывает, что запросы sql обновляют модель запроса вместо комментария комментария.

Невозможно выяснить, как добавить простую форму комментариев с разных моделей на страницу с деталями. Любая помощь будет оценена по достоинству.

Кроме того, если есть более элегантный способ добавления формы комментариев в классный взгляд, хотелось бы его увидеть. Мой google-fu не помог мне найти что-нибудь.

+0

В коде: 'orm.instance.request = Request.objects.get (pk = self.object.pk) 'должно быть' form.instance.request = Request.objects.get (pk = self.object.pk) ' – Hybrid

+0

Это просто скопировать-вставить и удалить прокомментированную ## опечатку. Исправлено в оригинальной записи. Не актуальная проблема ... – Max

+0

Не удалось выяснить, как это сделать с CBV, сделало ее работой с легким представлением функций. – Max

ответ

0

Жаль, что я мог бы найти способ сделать это с ОЦК, но нет .. вид функция работает отлично ...

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 comments(self): 
     return RequestComment.objects.filter(request=Request.objects.get(pk=self.object.pk)) 


def RequestCommentAddView(request, pk): 
    form = RequestCommentForm(request.POST or None) 

    if form.is_valid() and pk: 
     form.instance.author = request.user 
     form.instance.request = Request.objects.get(pk=pk) 
     form.save() 
     return HttpResponseRedirect(reverse('request-detail', kwargs={'pk': pk})) 
    return HttpResponseRedirect(reverse('request-detail', kwargs={'pk': pk}))