Completed
Push — master ( aa0d85...69736b )
by Asif
01:01
created

crudbuilder.BaseInlineFormset   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 47
Duplicated Lines 0 %
Metric Value
dl 0
loc 47
rs 10
wmc 7

2 Methods

Rating   Name   Duplication   Size   Complexity  
A get_factory_kwargs() 0 19 3
A construct_formset() 0 15 4
1
from django.forms.models import inlineformset_factory
2
3
from crudbuilder.exceptions import NotModelException
4
5
6
class BaseInlineFormset(object):
7
    extra = 3
8
    can_delete = True
9
    inline_model = None
10
    parent_model = None
11
    exclude = []
12
    fields = None
13
    formfield_callback = None
14
    fk_name = None
15
    formset_class = None
16
    child_form = None
17
18
    def construct_formset(self):
19
        """
20
        Returns an instance of the inline formset
21
        """
22
        if not self.inline_model or not self.parent_model:
23
            msg = "Parent and Inline models are required in {}".format(self.__class__.__name__)
24
            raise NotModelException(msg)
25
26
        if self.inline_model:
27
            return inlineformset_factory(
28
                self.parent_model,
29
                self.inline_model,
30
                **self.get_factory_kwargs())
31
        else:
32
            return None
33
34
    def get_factory_kwargs(self):
35
        """
36
        Returns the keyword arguments for calling the formset factory
37
        """
38
        kwargs = {}
39
        kwargs.update({
40
            'can_delete': self.can_delete,
41
            'extra': self.extra,
42
            'exclude': self.exclude,
43
            'fields': self.fields,
44
            'formfield_callback': self.formfield_callback,
45
            'fk_name': self.fk_name,
46
        })
47
        if self.formset_class:
48
            kwargs['formset'] = self.formset_class
49
50
        if self.child_form:
51
            kwargs['form'] = self.child_form
52
        return kwargs
53