diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-05-23 12:58:38 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-06-12 08:49:06 +0200 |
commit | 88c9aeaeafd9bc77decbf0982be0fd9d20fd3993 (patch) | |
tree | 1e9650dcdfb9359e6c1a70031f7705d18700374d /ishtar_common/admin.py | |
parent | b40361b7c1b8e98690b1f4cf6b5154f8b22395ff (diff) | |
download | Ishtar-88c9aeaeafd9bc77decbf0982be0fd9d20fd3993.tar.bz2 Ishtar-88c9aeaeafd9bc77decbf0982be0fd9d20fd3993.zip |
Wizards - JSON fields: inlines for custom form in admin pages (refs #4089)
Diffstat (limited to 'ishtar_common/admin.py')
-rw-r--r-- | ishtar_common/admin.py | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 1edbd0f68..48847b804 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -874,13 +874,41 @@ class ExcludeFieldInline(admin.TabularInline): formset = ExcludeFieldFormset +class JsonFieldFormset(BaseInlineFormSet): + def get_form_kwargs(self, index): + kwargs = super(JsonFieldFormset, self).get_form_kwargs(index) + if not self.instance or not self.instance.pk: + return kwargs + kwargs['choices'] = [('', '--')] + \ + self.instance.get_available_json_fields() + return kwargs + + +class JsonFieldForm(forms.ModelForm): + class Meta: + model = models.CustomFormJsonField + exclude = [] + + def __init__(self, *args, **kwargs): + choices = kwargs.pop('choices') + super(JsonFieldForm, self).__init__(*args, **kwargs) + self.fields['json_field'].choices = choices + + +class JsonFieldInline(admin.TabularInline): + model = models.CustomFormJsonField + extra = 2 + form = JsonFieldForm + formset = JsonFieldFormset + + class CustomFormAdmin(admin.ModelAdmin): list_display = ['name', 'form', 'available', 'enabled', 'apply_to_all', 'users_lbl', 'user_types_lbl'] fields = ('name', 'form', 'available', 'enabled', 'apply_to_all', 'users', 'user_types') form = CustomFormForm - inlines = [ExcludeFieldInline] + inlines = [ExcludeFieldInline, JsonFieldInline] def get_inline_instances(self, request, obj=None): # no inline on creation |