from django.contrib import admin, messages from django.shortcuts import redirect from django.urls import path from .models import PriceItem from .views import update_prices_from_api @admin.register(PriceItem) class PriceItemAdmin(admin.ModelAdmin): list_display = ('name', 'price', 'updated_at') search_fields = ('name',) actions = ['update_prices_action'] def update_prices_action(self, request, queryset): """Admin action для обновления прайса.""" update_prices_from_api(request) update_prices_action.short_description = "Обновить прайс из API" def get_urls(self): """Добавляем кастомный URL для кнопки в changelist.""" urls = super().get_urls() custom_urls = [ path('update-prices/', self.admin_site.admin_view(self.update_prices_view), name='update-prices'), ] return custom_urls + urls def update_prices_view(self, request): """View для кнопки обновления.""" update_prices_from_api(request) return redirect('admin:prices_priceitem_changelist') def changelist_view(self, request, extra_context=None): """Передаём в контекст наличие кнопки.""" extra_context = extra_context or {} extra_context['show_update_button'] = True return super().changelist_view(request, extra_context=extra_context)