Skip to content

Commit 0cad79b

Browse files
committed
feat: Less verbose UI and autocomplete fields
1 parent d51f806 commit 0cad79b

File tree

5 files changed

+49
-15
lines changed

5 files changed

+49
-15
lines changed

djangocms_versioning/admin.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,9 @@ class VersionAdmin(ChangeListActionsMixin, admin.ModelAdmin, metaclass=MediaDefi
618618
actions = ["compare_versions", "delete_selected"]
619619
list_display = (
620620
"number",
621-
"created",
621+
) + (
622+
("created",) if conf.VERBOSE_UI else ()
623+
) + (
622624
"modified",
623625
"content",
624626
"created_by",
@@ -639,6 +641,9 @@ class VersionAdmin(ChangeListActionsMixin, admin.ModelAdmin, metaclass=MediaDefi
639641
class Media:
640642
js = ["djangocms_versioning/js/versioning.js"]
641643

644+
def has_module_permission(self, request):
645+
return conf.VERBOSE_UI
646+
642647
def get_changelist(self, request, **kwargs):
643648
return VersionChangeList
644649

@@ -963,10 +968,12 @@ def grouper_form_view(self, request):
963968
to show versions of.
964969
"""
965970
language = get_language_from_request(request)
971+
versionable = versionables.for_content(self.model._source_model)
966972
context = dict(
967973
self.admin_site.each_context(request),
968974
opts=self.model._meta,
969-
form=grouper_form_factory(self.model._source_model, language)(),
975+
form=grouper_form_factory(self.model._source_model, language, self.admin_site)(),
976+
title=_("Select {} to view its versions").format(versionable.grouper_model._meta.verbose_name),
970977
)
971978
return render(request, "djangocms_versioning/admin/grouper_form.html", context)
972979

djangocms_versioning/conf.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,9 @@
3333
settings, "DJANGOCMS_VERISONING_ON_PUBLISH_REDIRECT", "published"
3434
)
3535
#: Allowed values: "versions", "published", "preview"
36+
37+
VERBOSE_UI = getattr(
38+
settings, "DJANGOCMS_VERSIONING_VERBOSE_UI", True
39+
)
40+
#: If True, the version admin will be offered in the admin index
41+
#: for each registered versionable model.

djangocms_versioning/forms.py

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,27 @@
11
from functools import lru_cache
22

33
from django import forms
4+
from django.contrib.admin.widgets import AutocompleteSelect
45

56
from . import versionables
67

8+
class VersionAutocompleteSelect(AutocompleteSelect):
9+
def optgroups(self, name: str, value: str, attr: dict | None = None):
10+
default = (None, [], 0)
11+
default[1].append(self.create_option(name, "", "", False, 0))
12+
return [default]
713

8-
class VersionContentChoiceField(forms.ModelChoiceField):
14+
15+
class VersionContentChoiceField(forms.ChoiceField):
916
"""Form field used to display a list of grouper instances"""
1017

11-
def __init__(self, *args, **kwargs):
18+
def __init__(self, *args, model=None, **kwargs):
1219
self.language = kwargs.pop("language")
1320
self.predefined_label_method = kwargs.pop("option_label_override")
21+
kwargs.setdefault("widget", VersionAutocompleteSelect(
22+
model._meta.get_field(versionables.for_content(model).grouper_field_name),
23+
admin_site=kwargs.pop("admin_site"),
24+
))
1425
super().__init__(*args, **kwargs)
1526

1627
def label_from_instance(self, obj):
@@ -22,7 +33,7 @@ def label_from_instance(self, obj):
2233

2334

2435
@lru_cache
25-
def grouper_form_factory(content_model, language=None):
36+
def grouper_form_factory(content_model, language=None, admin_site=None):
2637
"""Returns a form class used for selecting a grouper to see versions of.
2738
Form has a single field - grouper - which is a model choice field
2839
with available grouper objects for specified content model.
@@ -31,21 +42,16 @@ def grouper_form_factory(content_model, language=None):
3142
:param language: Language
3243
"""
3344
versionable = versionables.for_content(content_model)
34-
valid_grouper_pk = content_model.admin_manager\
35-
.latest_content()\
36-
.values_list(versionable.grouper_field_name, flat=True)
37-
3845
return type(
3946
content_model.__name__ + "GrouperForm",
4047
(forms.Form,),
4148
{
4249
"_content_model": content_model,
4350
versionable.grouper_field_name: VersionContentChoiceField(
44-
queryset=versionable.grouper_model.objects.filter(
45-
pk__in=valid_grouper_pk,
46-
),
47-
label=versionable.grouper_model._meta.verbose_name,
51+
label=versionable.grouper_model._meta.verbose_name.capitalize(),
4852
option_label_override=versionable.grouper_selector_option_label,
53+
admin_site=admin_site,
54+
model=content_model,
4955
language=language,
5056
),
5157
},

djangocms_versioning/templates/djangocms_versioning/admin/grouper_form.html

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{% extends "admin/base_site.html" %}
1+
{% extends "admin/change_form.html" %}
22
{% load i18n admin_urls static admin_list %}
33

44
{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-list{% endblock %}
@@ -13,6 +13,7 @@
1313
{% endblock %}
1414
{% endif %}
1515

16+
{% block extrastyle %}{{ block.super }}{{ form.media }}{% endblock extrastyle %}
1617
{% block coltype %}flex{% endblock %}
1718

1819
{% block content %}
@@ -33,7 +34,11 @@
3334
{% endblock %}
3435
<div class="module" id="changelist">
3536
<form action="{% url opts|admin_urlname:"changelist" %}">
36-
{{ form }}
37+
<div class="form-row">
38+
<div class="flex-container">
39+
{{ form }}
40+
</div>
41+
</div>
3742
<button type="submit">{% translate "Submit" %}</button>
3843
</form>
3944
</form>

docs/settings.rst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,13 @@ Settings for djangocms Versioning
8989
* ``"preview"``: The user will be redirected to the content object's
9090
preview endpoint.
9191

92+
.. py:attribute:: DJANGOCMS_VERISONING_VERBOSE_UI
93+
94+
Defaults to ``True``
95+
96+
For many users it is sufficient to interact with djangocms-versioning
97+
through a less verbose UI. If set to ``False``, djangocms-versioning will
98+
not display the creation date in the "manage versions" view. Also, it will
99+
remove its entries in the django admin overview page (index).
100+
"manage versions" remains accessible trough the version menu in the CMS
101+
toolbar.

0 commit comments

Comments
 (0)