from django.contrib import admin # Register your models here. from .manager import PluginLoader from django.http import HttpResponseRedirect from django.urls import path from django.utils.html import format_html from django.shortcuts import render from django import forms from pms_integration.models import PMSConfiguration, PMSIntegrationLog class PMSConfigurationForm(forms.ModelForm): class Meta: model = PMSConfiguration fields = '__all__' def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Загружаем доступные плагины plugins = PluginLoader.load_plugins() plugin_choices = [(plugin_name, plugin_name) for plugin_name in plugins.keys()] self.fields['plugin_name'] = forms.ChoiceField(choices=plugin_choices, required=False) @admin.register(PMSConfiguration) class PMSConfigurationAdmin(admin.ModelAdmin): form = PMSConfigurationForm list_display = ('name', 'plugin_name', 'created_at') search_fields = ('name', 'plugin_name') ordering = ('-created_at',) def save_model(self, request, obj, form, change): # Проверка на наличие плагина plugins = PluginLoader.load_plugins() if obj.plugin_name and obj.plugin_name not in plugins.keys(): raise ValueError(f"Выберите корректный плагин. '{obj.plugin_name}' нет среди допустимых значений.") super().save_model(request, obj, form, change) @admin.register(PMSIntegrationLog) class PMSIntegrationLogAdmin(admin.ModelAdmin): list_display = ('hotel', 'checked_at', 'status', 'message') search_fields = ('hotel__name', 'status', 'message') list_filter = ('status', 'checked_at') ordering = ('-checked_at',)