From 88c9aeaeafd9bc77decbf0982be0fd9d20fd3993 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Wed, 23 May 2018 12:58:38 +0200 Subject: Wizards - JSON fields: inlines for custom form in admin pages (refs #4089) --- ishtar_common/admin.py | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'ishtar_common/admin.py') 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 -- cgit v1.2.3