Example #1
0
 def __init__(self, *args, **kwargs):
     """
     Конструктор для корректного отображения объектов
     """
     instance = kwargs.get('instance', None)
     super(DataMartAdminForm, self).__init__(*args, **kwargs)
     if instance is not None:
         entity_model = instance.entities_model
     else:
         entity_model = DataMartModel.get_base_entity_model()
     self.fields['ordering'].choices = entity_model.ORDERING_MODES
     self.fields['view_component'].choices = entity_model.VIEW_COMPONENTS
Example #2
0
 def __init__(self, *args, **kwargs):
     """
     Конструктор для корректного отображения объектов
     """
     entities_model = kwargs.pop('entities_model', None)
     super(EntitiesUpdateStateAdminForm, self).__init__(*args, **kwargs)
     if entities_model is None:
         entities_model = DataMartModel.get_base_entity_model()
     transition_states = getattr(entities_model, 'TRANSITION_TARGETS', {})
     if transition_states:
         choices = []
         for k, v in transition_states.items():
             choices.append((k, v))
         self.fields['state'].choices = choices
Example #3
0
def update_states(modeladmin, request, queryset):
    """
    ENG: Update states for multiple entities
    RUS: Обновляет состояния для нескольких объектов
    """
    CHUNK_SIZE = getattr(settings, 'EDW_UPDATE_STATES_ACTION_CHUNK_SIZE', 100)

    opts = modeladmin.model._meta
    app_label = opts.app_label

    try:
        terms_ids = queryset[0].terms.values_list('id', flat=True)
    except IndexError:
        entities_model = DataMartModel.get_base_entity_model()
    else:
        entities_model = DataMartModel.get_entities_model(terms_ids)

    if request.POST.get('post'):
        form = EntitiesUpdateStateAdminForm(request.POST, entities_model=entities_model)

        if form.is_valid():
            state = form.cleaned_data['state']

            n = queryset.count()
            if n and state:
                i = 0
                tasks = []
                while i < n:
                    chunk = queryset[i:i + CHUNK_SIZE]
                    for obj in chunk:
                        obj_display = force_text(obj)
                        modeladmin.log_change(request, obj, obj_display)

                    tasks.append(update_entities_states.si([x.id for x in chunk], state))

                    i += CHUNK_SIZE

                chain(reduce(OR, tasks)).apply_async()

                modeladmin.message_user(request, _("Successfully proceed %(count)d %(items)s.") % {
                    "count": n, "items": model_ngettext(modeladmin.opts, n)
                })

            # Return None to display the change list page again.
            return None
    else:
        form = EntitiesUpdateStateAdminForm(entities_model=entities_model)

    if len(queryset) == 1:
        objects_name = force_text(opts.verbose_name)
    else:
        objects_name = force_text(opts.verbose_name_plural)

    title = _("Update state for multiple entities")
    context = {
        "title": title,
        'form': form,
        "objects_name": objects_name,
        'queryset': queryset,
        "opts": opts,
        "app_label": app_label,
        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
        'media': modeladmin.media,
        'action': 'update_states',
    }
    # Display the confirmation page
    kwargs = {}
    return TemplateResponse(request, "edw/admin/entities/actions/update_states.html",
                            context, **kwargs)