89 lines
2.5 KiB
Python
89 lines
2.5 KiB
Python
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)
|
|
|