import time from django.conf import settings from django.contrib import admin from django.contrib import messages from django_admin_listfilter_dropdown.filters import DropdownFilter from . import models from . import util @admin.register(models.Person) class AdminPerson(admin.ModelAdmin): list_per_page = 50 list_display = ( 'name', 'country', 'is_actor', 'is_director', 'is_woman', ) search_fields = ('name',) list_filter = ('is_woman', 'is_actor', 'is_director', 'country') @admin.register(models.Movie) class AdminMovie(admin.ModelAdmin): list_per_page = 50 list_display = ( 'name', 'original_name', 'year', 'duration', 'count') search_fields = ('name', 'original_name') filter_horizontal = ('directors',) list_filter = ( 'is_digital', ('directors__name', DropdownFilter), ('countries__name', DropdownFilter), ('year', DropdownFilter), ) _is_new = False actions = ['published'] def save_model(self, request, obj, form, change): self._is_new = obj.pk is None super().save_model(request, obj, form, change) return def save_related(self, request, form, formsets, change): obj = form.instance super().save_related(request, form, formsets, change) if self._is_new and obj.published: self._public(obj) return def formfield_for_manytomany(self, db_field, request, **kwargs): if db_field.name == 'directors': kwargs['queryset'] = models.Person.objects.filter(is_director=True) if db_field.name == 'actors': kwargs['queryset'] = models.Person.objects.filter(is_actor=True) return super().formfield_for_manytomany(db_field, request, **kwargs) def published(self, request, queryset): obj = queryset[0] self._public(obj) self.message_user(request, 'Publicado correctamente', messages.SUCCESS) published.short_description = 'Republicar en redes' @util.run_in_thread def _public(self, obj): time.sleep(3) message = f"""\"{obj.name}\" Dir: {', '.join(obj.directors.values_list('name', flat=True))} País: {', '.join(obj.countries.values_list('name', flat=True))} Año: {obj.year} """ # ~ util.public_mastodon(message, obj.cartel) # ~ util.public_telegram(message, obj.cartel.url) util.public_social(message, obj.cartel) return admin.site.register(models.Gender) admin.site.register(models.Country)