I have this code in 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/<intbject_id>/', 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) The main problem is related to this code 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/<intbject_id>/', 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() I want a form with a model to open when I click on the button, which I will fill out But it can't be done. Here is the model that I want the redirect to come to @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 = "Акты списания" here is the code of the button itself, which is used in my application jazzmin {% extends "admin/change_form.html" %} {% block object-tools %} {{ block.super }} <div class="submit-row" style="display: flex; flex-direction: column; gap: 10px; padding-top: 15px;"> <form method="post" action="{% url 'admin:create_act' object_id=original.id %}"> {% csrf_token %} <input type="submit" value="Сформировать акт" class="btn btn-success form-control"> </form> </div> {% endblock %} My the option did not work 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/<intbject_id>/', self.admin_site.admin_view(self.create_act), name='create_act'), ] return custom_urls + urls Continue reading...