Source code for shoop.admin.modules.categories.views.edit

# -*- coding: utf-8 -*-
# This file is part of Shoop.
#
# Copyright (c) 2012-2016, Shoop Ltd. All rights reserved.
#
# This source code is licensed under the AGPLv3 license found in the
# LICENSE file in the root directory of this source tree.

from django import forms
from django.conf import settings

from shoop.admin.form_part import (
    FormPart, FormPartsViewMixin, SaveFormPartsMixin, TemplatedFormDef
)
from shoop.admin.forms.widgets import MediaChoiceWidget
from shoop.admin.utils.forms import filter_form_field_choices
from shoop.admin.utils.views import CreateOrUpdateView
from shoop.core.models import Category, CategoryStatus
from shoop.utils.multilanguage_model_form import MultiLanguageModelForm


[docs]class CategoryBaseForm(MultiLanguageModelForm):
[docs] class Meta: model = Category fields = ( "parent", "shops", "status", "ordering", "visibility", "visibility_groups", "name", "image", "description", "slug", ) widgets = { "status": forms.RadioSelect, "visibility": forms.RadioSelect, }
def __init__(self, **kwargs): super(CategoryBaseForm, self).__init__(**kwargs) # Exclude `DELETED`. We don't want people to use that field to set a category as deleted. filter_form_field_choices(self.fields["status"], (CategoryStatus.DELETED.value,), invert=True) # Exclude current category from parents, because it cannot be its own child anyways filter_form_field_choices(self.fields["parent"], (kwargs["instance"].pk,), invert=True) self.fields["image"].widget = MediaChoiceWidget(clearable=True)
[docs]class CategoryBaseFormPart(FormPart): priority = -1000 # Show this first, no matter what
[docs] def get_form_defs(self): yield TemplatedFormDef( "base", CategoryBaseForm, template_name="shoop/admin/categories/_edit_base_form.jinja", required=True, kwargs={"instance": self.object, "languages": settings.LANGUAGES} )
[docs] def form_valid(self, form): rebuild = ("parent" in form["base"].changed_data) self.object = form["base"].save() if rebuild: Category.objects.rebuild()
[docs]class CategoryEditView(SaveFormPartsMixin, FormPartsViewMixin, CreateOrUpdateView): model = Category template_name = "shoop/admin/categories/edit.jinja" context_object_name = "category" base_form_part_classes = [CategoryBaseFormPart] form_part_class_provide_key = "admin_category_form_part"
[docs] def form_valid(self, form): return self.save_form_parts(form)