0.5.26 docs admin add actions for assign version to docs list

This commit is contained in:
SDE
2024-07-20 13:42:46 +03:00
parent 3a4f9e5606
commit 2dddcab2f2

View File

@@ -7,6 +7,7 @@ from django.utils.translation import gettext as _
from django import forms
from django.utils.text import slugify
from django.db.models import Min
from django.contrib import messages
class DocArtForm(forms.ModelForm):
@@ -19,6 +20,26 @@ class DocArtForm(forms.ModelForm):
self.fields['parent'].queryset = DocArt.objects.exclude(id__exact=self.instance.id)
def make_assign_versions_action(version):
def assign_to_version(modeladmin, request, queryset):
for art in queryset:
if version not in art.versions.all():
art.versions.add(version) # Method on Order model
messages.info(request, f"Статье {art} назначена версия {version.name}")
assign_to_version.short_description = _(f"Назначить версию {version.name}")
# We need a different '__name__' for each action - Django
# uses this as a key in the drop-down box.
assign_to_version.__name__ = _(f"Назначить версию {version.name}")
return assign_to_version
class Admin_DocArt(SuperModelAdmin, Admin_Trans_BaseModelViewPage):
form = DocArtForm
@@ -93,6 +114,20 @@ class Admin_DocArt(SuperModelAdmin, Admin_Trans_BaseModelViewPage):
# inlines = [Admin_StackedInline_Block]
actions = ["create_copy_arts"]
def get_actions(self, request):
actions = super(Admin_DocArt, self).get_actions(request)
versions = DocVersion.objects.filter(enable=True)
for version in versions:
action = make_assign_versions_action(version)
actions[action.__name__] = (action,
action.__name__,
action.short_description)
return actions
@admin.action(description=_("Создать копии выбранных статей"))
def create_copy_arts(self, request, queryset):
from BaseModels.functions import create_url