Skip to content
Snippets Groups Projects
Commit 81ba9b8d authored by Tomáš Valenta's avatar Tomáš Valenta
Browse files

fieldsets and inlines - order

parent c613dd28
No related branches found
No related tags found
No related merge requests found
Pipeline #12049 passed
...@@ -4,7 +4,6 @@ import typing ...@@ -4,7 +4,6 @@ import typing
from django.contrib import admin from django.contrib import admin
from django.contrib.auth.models import Permission from django.contrib.auth.models import Permission
from django.utils.html import format_html from django.utils.html import format_html
from fieldsets_with_inlines import FieldsetsInlineMixin
from import_export import resources from import_export import resources
from nested_admin import (NestedModelAdmin, NestedStackedInline, from nested_admin import (NestedModelAdmin, NestedStackedInline,
NestedTabularInline) NestedTabularInline)
...@@ -153,7 +152,6 @@ class ContractAdmin( ...@@ -153,7 +152,6 @@ class ContractAdmin(
lambda request, obj: obj.is_approved, lambda request, obj: obj.is_approved,
), ),
MarkdownxGuardedModelAdmin, MarkdownxGuardedModelAdmin,
FieldsetsInlineMixin,
NestedModelAdmin, NestedModelAdmin,
): ):
form = ContractAdminForm form = ContractAdminForm
...@@ -165,7 +163,21 @@ class ContractAdmin( ...@@ -165,7 +163,21 @@ class ContractAdmin(
"issues", "issues",
) )
fieldsets_with_inlines = [ inlines = (
ContractFileInline,
ContracteeSignatureInline,
SigneeSignatureInline,
ContractIntentInline,
)
def get_form(self, request, *args, **kwargs) -> ContractAdminForm:
form = super().get_form(request, *args, **kwargs)
form.current_user = request.user
return form
def get_fieldsets(self, request, obj=None) -> list:
fieldsets = [
( (
"Základní informace", "Základní informace",
{ {
...@@ -198,9 +210,6 @@ class ContractAdmin( ...@@ -198,9 +210,6 @@ class ContractAdmin(
] ]
}, },
), ),
ContractFileInline,
ContracteeSignatureInline,
SigneeSignatureInline,
( (
"Odkazy", "Odkazy",
{ {
...@@ -210,7 +219,6 @@ class ContractAdmin( ...@@ -210,7 +219,6 @@ class ContractAdmin(
] ]
}, },
), ),
ContractIntentInline,
( (
"Fyzický dokument", "Fyzický dokument",
{ {
...@@ -231,36 +239,46 @@ class ContractAdmin( ...@@ -231,36 +239,46 @@ class ContractAdmin(
), ),
] ]
def get_form(self, request, *args, **kwargs) -> ContractAdminForm:
form = super().get_form(request, *args, **kwargs)
form.current_user = request.user
return form
def get_fieldsets(self, request, obj=None):
fieldsets_with_inlines = copy.deepcopy(self.fieldsets_with_inlines)
if ( if (
obj is None # Creating confidential data, creator will be request.user obj is None # Creating confidential data, creator will be request.user
or obj.created_by == request.user or obj.created_by == request.user
or request.user.has_perm("view_confidential", obj) or request.user.has_perm("view_confidential", obj)
): ):
fieldsets_with_inlines[0][1]["fields"].insert( fieldsets[0][1]["fields"].insert(
fieldsets_with_inlines[0][1]["fields"].index("is_public") + 1, fieldsets[0][1]["fields"].index("is_public") + 1,
"publishing_rejection_comment", "publishing_rejection_comment",
) )
if request.user.is_superuser or request.user.has_perm("approve", self): if request.user.has_perm("approve", self):
fieldsets_with_inlines.insert( fieldsets.insert(
8, 5,
("Schválení", {"fields": ["is_approved"]}), ("Schválení", {"fields": ["is_approved"]}),
) )
return [ return fieldsets
self.make_placeholder(index, fieldset)
for index, fieldset in enumerate(fieldsets_with_inlines) def get_fieldsets_and_inlines_order(self, context) -> list:
order = [
"f",
"f",
"f",
"i",
"i",
"i",
"f",
"i",
"f",
"f",
] ]
if context["user"].has_perm("approve", self):
order.insert(
10,
"f"
)
return order
def get_queryset(self, request): def get_queryset(self, request):
queryset = super().get_queryset(request) queryset = super().get_queryset(request)
......
from django.template import Library
register = Library()
@register.simple_tag(takes_context=True)
def get_fieldsets_and_inlines(context):
adminform = context["adminform"]
model_admin = adminform.model_admin
adminform = iter(adminform)
inlines = iter(context["inline_admin_formsets"])
fieldsets_and_inlines = []
for choice in (
model_admin.get_fieldsets_and_inlines_order(context)
if hasattr(model_admin, "get_fieldsets_and_inlines_order")
else model_admin.fieldsets_and_inlines_order
):
if choice == "f":
fieldsets_and_inlines.append(("f", next(adminform)))
elif choice == "i":
fieldsets_and_inlines.append(("i", next(inlines)))
for fieldset in adminform:
fieldsets_and_inlines.append(("f", fieldset))
for inline in inlines:
fieldsets_and_inlines.append(("i", inline))
return fieldsets_and_inlines
...@@ -53,7 +53,6 @@ INSTALLED_APPS = [ ...@@ -53,7 +53,6 @@ INSTALLED_APPS = [
"django.contrib.sessions", "django.contrib.sessions",
"django.contrib.messages", "django.contrib.messages",
"django.contrib.staticfiles", "django.contrib.staticfiles",
"fieldsets_with_inlines",
"nested_admin", "nested_admin",
"import_export", "import_export",
"rangefilter", "rangefilter",
......
{% extends "admin/change_form.html" %}
{% load admin_extras %}
{% block field_sets %}
{% get_fieldsets_and_inlines as fieldsets_and_inlines %}
{% for type, fieldset_or_inline in fieldsets_and_inlines %}
{% if type == 'f' %}
{% with fieldset=fieldset_or_inline %}
{% include "admin/includes/fieldset.html" %}
{% endwith %}
{% elif type == 'i' %}
{% with inline_admin_formset=fieldset_or_inline %}
{% include inline_admin_formset.opts.template %}
{% endwith %}
{% endif %}
{% endfor %}
{% endblock %}
{% block inline_field_sets %}{% endblock %}
...@@ -5,7 +5,6 @@ django-admin-rangefilter==0.9.0 ...@@ -5,7 +5,6 @@ django-admin-rangefilter==0.9.0
django-autocomplete-light==3.9.4 django-autocomplete-light==3.9.4
django-database-url==1.0.3 django-database-url==1.0.3
django-downloadview==2.3.0 django-downloadview==2.3.0
django-fieldsets-with-inlines==0.6
django-import-export==3.1.0 django-import-export==3.1.0
django-nested-admin==4.0.2 django-nested-admin==4.0.2
django-ordered-model==3.7.1 django-ordered-model==3.7.1
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment