예제 #1
0
    def get_weak_formset(self, weak, item=None, postdata=None):

        model_to_add_field = weak['item_field']

        if 'prefix' in weak:
            fsargs = {'prefix': weak['prefix']}
        else:
            fsargs = {'prefix': weak['field_name']}

        if item:
            extra_excludes = one_to_many_formset_excludes(item, weak['model'])
            fsargs['queryset'] = getattr(item, weak['field_name']).all()
        else:
            if issubclass(weak['model'], AbstractValue):
                extra_excludes = ['value_meaning']
            else:
                extra_excludes = []
            fsargs['queryset'] = weak['model'].objects.none()

        if postdata:
            fsargs['data'] = postdata

        all_excludes = [model_to_add_field, weak['model'].ordering_field] + extra_excludes
        formset = ordered_formset_factory(
            weak['model'], exclude=all_excludes, ordering_field=weak['model'].ordering_field
        )

        final_formset = formset(**fsargs)

        return final_formset
예제 #2
0
    def get_formset_class(self):
        extra_excludes = one_to_many_formset_excludes(self.item, self.model_to_add)
        all_excludes = [self.model_to_add_field, ] + extra_excludes
        if self.ordering_field:
            all_excludes.append(self.ordering_field)
        kwargs = {}
        form = self.get_form()

        if form:
            kwargs.update(form=form)
        if self.formset_class:
            kwargs.update(formset=self.formset_class)

        formset = self.get_formset_factory()(
            model=self.model_to_add,
            parent_model=self.model_base,
            fk_name=self.model_to_add_field,
            exclude=all_excludes,
            can_order=self.is_ordered,
            can_delete=True,
            extra=0,
            widgets=get_aristotle_widgets(self.model_to_add, ordering_field=self.ordering_field),
            **kwargs
        )
        formset.is_ordered = self.is_ordered
        if self.ordering_field:
            formset.ordering_field = self.ordering_field
        return formset
예제 #3
0
    def get_formset(self):

        extra_excludes = one_to_many_formset_excludes(self.item, self.model_to_add)
        all_excludes = [self.model_to_add_field, self.ordering_field] + extra_excludes
        formset = ordered_formset_factory(self.model_to_add, all_excludes)

        return formset
예제 #4
0
    def get_weak_formset(self, weak, item=None, postdata=None, clone=False):

        model_to_add_field = weak['item_field']

        if 'prefix' in weak:
            fsargs = {'prefix': weak['prefix']}
        else:
            fsargs = {'prefix': weak['field_name']}

        if item and not clone:
            extra_excludes = one_to_many_formset_excludes(item, weak['model'])
            fsargs['queryset'] = getattr(item, weak['field_name']).all()
        else:
            if issubclass(weak['model'], AbstractValue):
                extra_excludes = ['value_meaning']
            else:
                extra_excludes = []
            fsargs['queryset'] = weak['model'].objects.none()

        extra = 0
        if clone:
            initial = []
            from django.forms.models import model_to_dict
            for index, obj in enumerate(
                    getattr(item, weak['field_name']).all()):
                o = model_to_dict(obj)
                ordering_field = weak['model'].ordering_field
                if ordering_field and ordering_field in o.keys():
                    o['ORDER'] = o.pop(weak['model'].ordering_field)
                for k in [
                        'pk', 'id'
                ]:  # TODO: do we need to remove the FK field? eg. 'valueDomain'
                    o.pop(k, None)
                initial.append(o)

                if 'parent' in o.keys():
                    # Only needed for FrameworkDimensions
                    # Blank when cloning
                    o['parent'] = None
            fsargs['initial'] = initial
            extra = len(initial)

        if postdata:
            fsargs['data'] = postdata

        all_excludes = [model_to_add_field, weak['model'].ordering_field
                        ] + extra_excludes
        formset = ordered_formset_factory(
            weak['model'],
            exclude=all_excludes,
            extra=extra,
            ordering_field=weak['model'].ordering_field)

        final_formset = formset(**fsargs)

        return final_formset