def news_create(request, article_category=None, instance=None): # Config for reuse ModelClass = News instance = instance or ModelClass() form = NewsForm(instance, ModelClass, request.user, request.POST) is_new = form.is_new() if article_category: try: article_category = ArticleCategory.objects.filter( level=0, permalink=article_category).first() except ArticleCategory.DoesNotExist: raise Http404() if instance.id: article_category = instance.categories.filter(level=0).first() if request.method == 'POST': form = NewsForm(instance, ModelClass, request.user, request.POST) is_new = form.is_new() if form.is_valid(): # Relation if not instance.created_by_id: instance.created_by = request.user if not instance.party_created_by_id: instance.party_created_by = request.logged_in_party instance.permalink = form.cleaned_data['permalink'] instance.title = form.cleaned_data['title'] if form.cleaned_data['summary'] == '': summary = strip_tags(form.cleaned_data['description']) instance.summary = truncatechars(summary, 240) else: instance.summary = form.cleaned_data['summary'] instance.description = form.cleaned_data['description'] #instance.organization = form.cleaned_data['organization'] instance.article_category = form.cleaned_data['article_category'] instance.homepage_url = form.cleaned_data['homepage_url'] instance_image = instance._meta.get_field('image') if instance_image: instance_image.save_form_data(instance, form.cleaned_data['image']) instance_files = instance._meta.get_field('files') if instance_files: instance_files.save_form_data(instance, form.cleaned_data['files']) instance.is_promoted = form.cleaned_data['is_promoted'] instance.tags = form.cleaned_data['tags'] instance.changed = timezone.now() instance.save() instance.topics.clear() for topic in form.cleaned_data['topics']: instance.topics.add(topic) instance.categories.clear() for category in form.cleaned_data['categories']: instance.categories.add(category) CmsHasParty.objects.filter(src=instance).exclude( dst=form.cleaned_data['in_the_news']).delete() for party in form.cleaned_data['in_the_news']: CmsHasParty.objects.get_or_create(src=instance, dst=party) message_success = get_cms_success_message(instance, is_new, []) messages.success(request, message_success) return redirect('article_edit', instance.id) else: messages.error( request, 'Your submission error. Please, check in error fields.') else: if not instance.id: if request.user.is_staff: instance.is_promoted = True else: instance.is_promoted = False initial = { 'permalink': instance.permalink, 'title': instance.title, 'image': instance.image, #'organization': instance.organization, 'summary': instance.summary, 'description': instance.description, 'homepage_url': instance.homepage_url, 'article_category': instance.article_category, 'is_promoted': instance.is_promoted, 'tags': instance.tags, 'files': instance.files, } if instance.id: initial['topics'] = instance.topics.all() initial['categories'] = instance.categories.all() initial['in_the_news'] = Party.objects.filter( cms_has_party_dst__src=instance).distinct() else: initial['article_category'] = request.GET.get( 'article_category') # deprecate if article_category: initial['categories'] = [article_category] form = NewsForm(instance, ModelClass, request.user, initial=initial) return render( request, 'cms/news/form.html', { 'form': form, 'article_category': article_category, 'show_category_field': article_category and article_category.get_children().count(), 'is_staff': request.user.is_staff })