Friday, April 24, 2015

Re: ListView CBV and a form

El 24/04/15 06:08, David escribió:
This appears to work. Using a view for 2 functions seems pretty fugly though. Are there better ways to achieve this?

class CreateComment(ListView, FormMixin):
model = Comment
paginate_by = 2
form_class = CommentForm

def post(self, request, *args, **kwargs):
form = CommentForm(self.request.POST)
if form.is_valid():
obj = form.save(commit=False)
obj.creator = request.user
obj.object_id = self.kwargs['pk']
obj.content_type_id = self.kwargs['ct']
obj.save()
else:
return super(CreateComment, self).post(request, *args, **kwargs)

def get_queryset(self):
comments = Comment.objects.filter(
object_id=self.kwargs['pk'], content_type_id=self.kwargs['ct']
)
return comments

def get_context_data(self, **kwargs):
context = super(CreateComment, self).get_context_data(**kwargs)
context['form'] = CommentForm
return context

I think that you shoul use CreateView to create new objects or UpdateView to update them.
ListView is used to represent a list of objects.

Cheers,
Felix.

No comments:

Post a Comment