Created
May 8, 2018 12:25
-
-
Save andreif/aca666d9dd2fe6228782617089d98829 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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