Как не работает кнопка перенаправления панели DjangoPython

Программы на Python
Anonymous
Как не работает кнопка перенаправления панели Django

Сообщение Anonymous »

У меня есть этот код в admin.py
@admin.register(BaseFundElement)
class BaseFundElementAdmin(admin.ModelAdmin):
list_display = ['registration_date', 'inventory_number', 'author', 'title', 'year', 'invoice_number',
'publication_status']
readonly_fields = ['id', 'registration_date', 'inventory_number', 'price', 'author', 'title', 'year',
'price_with_vat', 'vat_amount', 'invoice_number', 'invoice_date', 'publication_status']
fields = ['id', 'registration_date', 'inventory_number', 'author', 'title', 'year', 'invoice_number',
'publication_status']

labels = {
'currency': 'Издание'
}

change_form_template = "klib/create_act.html"

def create_act(self, request, object_id):
base_fund_element = self.get_object(request, object_id)
if request.method == "POST":
write_off_act = WriteOffAct.objects.create()
return redirect(reverse('admin:klib_writeoffact_change', args=[write_off_act.pk]))
return self.change_view(request, object_id)

def get_urls(self):
urls = super().get_urls()
custom_urls = [
path('create_act//', self.admin_site.admin_view(self.create_act), name='create_act'),
]
return custom_urls + urls

def get_queryset(self, request):
qs = super().get_queryset(request)

if 'publication_status__exact' in request.GET:
return qs
return BaseFundElement.active.all()

list_filter = ['publication_status']

actions = ['mark_as_written_off']

def author(self, obj: BaseFundElement):
return obj.arrival.order_edition.edition.author if obj.arrival.order_edition.edition.author else '-'

author.short_description = _('Author')

def title(self, obj: BaseFundElement):
return obj.arrival.order_edition.edition.title if obj.arrival.order_edition.edition.title else '-'

title.short_description = _('Edition title')

def year(self, obj: BaseFundElement):
return obj.arrival.order_edition.edition.year if obj.arrival.order_edition.edition.year else '-'

year.short_description = _('Year')

def has_add_permission(self, request, obj=None):
return False

def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
extra_context = extra_context or {}
extra_context['show_save_and_continue'] = False
extra_context['show_save'] = False
return super(BaseFundElementAdmin, self).changeform_view(request, object_id, extra_context=extra_context)

def has_edit_permission(self, request, obj=None):
return False

def edition(self, obj: BaseFundElement):
return obj.arrival if obj.arrival else ''

@transaction.atomic
def save_model(self, request, obj, form, change):
if obj.pk is None:
obj.save()

super().save_model(request, obj, form, change)

@transaction.atomic
def mark_as_written_off(self, request, queryset):
updated_count = queryset.update(publication_status=BaseFundElement.PUBLICATION_STATUS_WRITTEN_OFF)
self.message_user(request, f"{updated_count} изданий успешно списаны.")

mark_as_written_off.short_description = _('Списать выбранные издания')

my_admin_site.register(BaseFundElement, BaseFundElementAdmin)

Основная проблема связана с этим кодом
change_form_template = "klib/create_act.html"

def create_act(self, request, object_id):
base_fund_element = self.get_object(request, object_id)
if request.method == "POST":
write_off_act = WriteOffAct.objects.create()
return redirect(reverse('admin:klib_writeoffact_change', args=[write_off_act.pk]))
return self.change_view(request, object_id)

def get_urls(self):
urls = super().get_urls()
custom_urls = [
path('create_act//', self.admin_site.admin_view(self.create_act), name='create_act'),
]
return custom_urls + urls

def get_queryset(self, request):
qs = super().get_queryset(request)

if 'publication_status__exact' in request.GET:
return qs
return BaseFundElement.active.all()

Я хочу, чтобы при нажатии на кнопку открывалась форма с моделью, которую я буду заполнять
Но это невозможно сделать . Вот модель, на которую я хочу, чтобы перенаправление пришло
@admin.register(WriteOffAct)
class WriteOffActAdmin(admin.ModelAdmin):
list_display = ('basis_for_write_off', 'total_excluded', 'submitted_by', 'registered_by')

fieldsets = (
(None, {
'fields': ('basis_for_write_off',)
}),
('Исключить из фонда', {
'fields': ('journal_1_count', 'journal_2_count', 'journal_3_count')
}),
('Всего исключено из фонда', {
'fields': ('total_excluded',)
}),
('По содержанию изданий', {
'fields': ('socio_economic_count', 'technical_count', 'other_count', 'railway_theme_count')
}),
('Состав комиссии', {
'fields': ('chairman', 'vice_chairman', 'member_1', 'member_2', 'member_3')
}),
('Ответственные лица', {
'fields': ('submitted_by', 'registered_by')
}),
)

readonly_fields = ['total_excluded']
form = WriteOffActForm

my_admin_site.register(WriteOffAct, WriteOffActAdmin)

class WriteOffAct(models.Model):
basis_for_write_off = models.CharField(max_length=255, verbose_name="Основание списания")
journal_1_count = models.PositiveIntegerField(default=0, verbose_name="Количество экземпляров Журнал 1")
journal_2_count = models.PositiveIntegerField(default=0, verbose_name="Количество экземпляров Журнал 2")
journal_3_count = models.PositiveIntegerField(default=0, verbose_name="Количество экземпляров Журнал 3")
total_excluded = models.PositiveIntegerField(default=0, editable=False, verbose_name="Всего исключено из фонда")
socio_economic_count = models.PositiveIntegerField(default=0, verbose_name="Социально-экономические")
technical_count = models.PositiveIntegerField(default=0, verbose_name="Техника")
other_count = models.PositiveIntegerField(default=0, verbose_name="Прочие")
railway_theme_count = models.PositiveIntegerField(default=0, verbose_name="По железнодорожной тематике")
chairman = models.IntegerField(null=True, verbose_name="Председатель комиссии")
vice_chairman = models.IntegerField(null=True, verbose_name="Зам. председателя комиссии")
member_1 = models.IntegerField(null=True, verbose_name="Член комиссии 1")
member_2 = models.IntegerField(null=True, verbose_name="Член комиссии 2")
member_3 = models.IntegerField(null=True, verbose_name="Член комиссии 3")
submitted_by = models.IntegerField(verbose_name="Списанные документы сдал(а)")
registered_by = models.IntegerField(verbose_name="В книге суммарного учёта акт проведен")

def save(self, *args, **kwargs):
self.total_excluded = self.journal_1_count + self.journal_2_count + self.journal_3_count
super().save(*args, **kwargs)

class Meta:
app_label = 'klib'
verbose_name = "Акт списания"
verbose_name_plural = "Акты списания"

вот код самой кнопки, которая используется в моем приложении Jazzmin
{% extends "admin/change_form.html" %}

{% block object-tools %}
{{ block.super }}


{% csrf_token %}



{% endblock %}

Мой вариант не сработал
change_form_template = "klib/create_act.html"

def create_act(self, request, object_id):
base_fund_element = self.get_object(request, object_id)
if request.method == "POST":
write_off_act = WriteOffAct.objects.create()
return redirect(reverse('admin:klib_writeoffact_change', args=[write_off_act.pk]))
return self.change_view(request, object_id)

def get_urls(self):
urls = super().get_urls()
custom_urls = [
path('create_act//', self.admin_site.admin_view(self.create_act), name='create_act'),
]
return custom_urls + urls


Подробнее здесь: https://stackoverflow.com/questions/790 ... -dont-work

Вернуться в «Python»