35 lines
1.4 KiB
Python
35 lines
1.4 KiB
Python
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) |