Skip to content

Instantly share code, notes, and snippets.

@andreif
Created May 8, 2018 12:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andreif/aca666d9dd2fe6228782617089d98829 to your computer and use it in GitHub Desktop.
Save andreif/aca666d9dd2fe6228782617089d98829 to your computer and use it in GitHub Desktop.
# Django 1.7
class InlineAdminFormsetMixin(object):
inline_admin_formset_class = InlineAdminFormSet
def get_inline_formsets(self, request, formsets, inline_instances,
obj=None):
inline_admin_formsets = []
for inline, formset in zip(inline_instances, formsets):
fieldsets = list(inline.get_fieldsets(request, obj))
readonly = list(inline.get_readonly_fields(request, obj))
prepopulated = dict(inline.get_prepopulated_fields(request, obj))
inline_admin_formset = self.inline_admin_formset_class(
inline=inline, formset=formset, fieldsets=fieldsets,
prepopulated_fields=prepopulated, readonly_fields=readonly,
model_admin=self)
inline_admin_formsets.append(inline_admin_formset)
return inline_admin_formsets
class PrepareFormset(InlineAdminFormSet):
_request = None
_obj = None
def __iter__(self):
# if inline has prepare_form method
func = getattr(self.opts, 'prepare_form', None)
for form in super(PrepareFormset, self).__iter__():
if func:
func(form=form.form, request=self._request, obj=self._obj)
yield form
class PrepareFormsetMixin(InlineAdminFormsetMixin):
inline_admin_formset_class = PrepareFormset
def get_inline_formsets(self, request, formsets, inline_instances,
obj=None):
inline_admin_formsets = \
super(PrepareFormsetMixin, self).get_inline_formsets(
request, formsets, inline_instances, obj=obj)
for fs in inline_admin_formsets:
fs._request = request
fs._obj = obj
func = getattr(fs.opts, 'prepare_formset', None)
if func:
func(formset=fs.formset, request=request,
obj=obj)
return inline_admin_formsets
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment