Ejemplo n.º 1
0
def instrumenttype_pre_save(sender, instance, *args, **kwargs):
    try:
        prev = InstrumentType.objects.get(pk=instance.pk)
        if prev.category_id != instance.category_id:
            instance.ordering = get_default_ordering(InstrumentType,
                                                     instance.category_id)
    except InstrumentType.DoesNotExist:
        pass
Ejemplo n.º 2
0
    def test_change_new_category(self):
        type = InstrumentType.objects.all()[18]
        category = InstrumentCategory.objects.create(name='temp category')
        expected_ordering = get_default_ordering(InstrumentType,
                                                 category.pk)

        url = reverse('instrumenttype_update',
                      args=(type.category.slug, type.pk))
        response = self.client.post(url, {
            'name': type.name,
            'category': category.pk,
            'ordering': type.ordering,
        })

        self.assertEqual(response.status_code, 302)

        new_type = InstrumentType.objects.get(pk=type.pk)
        self.assertEqual(new_type.name, type.name)
        self.assertEqual(new_type.category, category)
        self.assertEqual(new_type.ordering, expected_ordering)
        self.assertEqual(new_type.ordering, 1)
Ejemplo n.º 3
0
    def post(self, request, *args, **kwargs):
        pka = kwargs.get('pka')
        pkb = kwargs.get('pkb')
        parent_field = None

        if pka is None or pkb is None:
            return HttpResponse(status=400)

        try:
            obja = self.model._default_manager.get(pk=pka)
            objb = self.model._default_manager.get(pk=pkb) \
                    if pkb != "-1" else None
        except self.model.DoesNotExist:
            raise Http404

        moving_down = objb is None or obja.ordering < objb.ordering
        conditions = ['gt', 'lt'] if moving_down else ['lt', 'gte']
        offset = -1 if moving_down else 1
        filters = {
            'ordering__%s' % conditions.pop(0): obja.ordering
        }
        if objb is not None:
            filters['ordering__%s' % conditions.pop(0)] = objb.ordering
        if hasattr(obja, 'parent_model'):
            parent_field = '%s' % obja.parent_model[0]
            filters[parent_field] = getattr(obja, parent_field)

        self.model._default_manager.filter(**filters)\
                    .update(ordering=F('ordering') + offset)

        target_ordering = objb.ordering - 1 if objb is not None \
                                            else get_default_ordering(
                                                    self.model,
                                                    filters.get(parent_field))
        if not moving_down:
            target_ordering += 1
        self.model._default_manager.filter(pk=obja.pk)\
                                    .update(ordering=target_ordering)

        return HttpResponse(status=200)
Ejemplo n.º 4
0
 def clean_ordering(self):
     ordering = self.cleaned_data.get('ordering')
     category = self.cleaned_data.get('category_id')
     if ordering <= 0:  # default value (new model instance)
         ordering = get_default_ordering(InstrumentType, category)
     return ordering