def topic_publish(request, category_id=None): if category_id: Category.objects.get_public_or_404(pk=category_id) if request.method == 'POST': form = TopicForm(user=request.user, data=request.POST) cform = CommentForm(user=request.user, data=request.POST) if not request.is_limited and form.is_valid() and cform.is_valid(): # wrap in transaction.atomic? topic = form.save() cform.topic = topic comment = cform.save() comment_posted.send(sender=comment.__class__, comment=comment, mentions=cform.mentions) return redirect(topic.get_absolute_url()) else: form = TopicForm(user=request.user, initial={ 'category': category_id, }) cform = CommentForm() return render(request, 'spirit/topic/topic_publish.html', { 'form': form, 'cform': cform })
def test_topic_update(self): """ create update """ category = utils.create_category() topic = utils.create_topic(category) form_data = {'title': 'foobar', } form = TopicForm(self.user, data=form_data, instance=topic) self.assertEqual(form.is_valid(), True)
def topic_publish(request, category_id=None): if category_id: Category.objects.get_public_or_404(pk=category_id) if request.method == 'POST': form = TopicForm(user=request.user, data=request.POST) cform = CommentForm(user=request.user, data=request.POST) pform = TopicPollForm(data=request.POST) pformset = TopicPollChoiceFormSet(can_delete=False, data=request.POST) if not request.is_limited and form.is_valid() and cform.is_valid() \ and pform.is_valid() and pformset.is_valid(): # wrap in transaction.atomic? topic = form.save() cform.topic = topic comment = cform.save() comment_posted.send(sender=comment.__class__, comment=comment, mentions=cform.mentions) # Create a poll only if we have choices if pformset.is_filled(): pform.topic = topic poll = pform.save() pformset.instance = poll pformset.save() return redirect(topic.get_absolute_url()) else: form = TopicForm(user=request.user, initial={ 'category': category_id, }) cform = CommentForm() pform = TopicPollForm() pformset = TopicPollChoiceFormSet(can_delete=False) return render(request, 'spirit/topic/topic_publish.html', { 'form': form, 'cform': cform, 'pform': pform, 'pformset': pformset })
def test_topic_publish(self): """ create topic """ category = utils.create_category() subcategory = utils.create_subcategory(category) form_data = {'comment': 'foo', 'title': 'foobar', 'category': subcategory.pk} form = TopicForm(self.user, data=form_data) self.assertEqual(form.is_valid(), True)
def test_topic_publish_invalid_subcategory(self): """ invalid subcategory """ category = utils.create_category() subcategory = utils.create_subcategory(category, is_closed=True) form_data = {'comment': 'foo', 'title': 'foobar', 'category': subcategory.pk} form = TopicForm(self.user, data=form_data) self.assertEqual(form.is_valid(), False) self.assertNotIn('category', form.cleaned_data)
def topic_update(request, pk): topic = Topic.objects.for_update_or_404(pk, request.user) if request.method == 'POST': form = TopicForm(user=request.user, data=request.POST, instance=topic) category_id = topic.category_id if form.is_valid(): topic = form.save() if topic.category_id != category_id: topic_post_moderate.send(sender=topic.__class__, user=request.user, topic=topic, action=MOVED) return redirect(request.POST.get('next', topic.get_absolute_url())) else: form = TopicForm(user=request.user, instance=topic) return render(request, 'spirit/topic/topic_update.html', { 'form': form, })