Невозможно адаптировать тип при использовании пользовательского поля в панели администратора django
Я пытаюсь добавить пользовательское поле в админпанель актера, чтобы показать количество фильмов, которые каждый внес в админпанель. административной панели.
from django.contrib import admin
from actors.models import Actor
@admin.register(Actor)
class ActorAdmin(admin.ModelAdmin):
search_fields = ('actor_name',)
list_filter = ('gender',)
list_display = ['actor_name', 'age', 'gender', 'movies_count']
readonly_fields = ['movies_count']
def movies_count(self, obj):
count = 0
for mv in Actor.objects.raw('select * from movies_movie_actors '
'where actor_id='
'(select id from actors_actor where actor_name="%s")', [obj]):
count += 1
return str(count)
movies_count.short_description = 'movie count'
но я получаю ошибку
Тип исключения: ProgrammingError
Значение исключения: не удается адаптировать тип 'Actor'
что означает ошибка, почему она проявляется и как ее решить (допустимы различные подходы с той же целью)
может быть актуальным
модель актера :
from django.db import models
GENDER_LIST = [('male', 'male'), ('female', 'female')]
class Actor(models.Model):
actor_name = models.fields.CharField(verbose_name='Name', max_length=25, unique=True)
gender = models.CharField(verbose_name='Gender', choices=GENDER_LIST, max_length=6, default='male')
age = models.IntegerField(default=0)
create_time = models.TimeField(verbose_name='Created at', auto_now=True)
update_time = models.TimeField(verbose_name='Updated at', auto_now=True)
def __str__(self):
return f'{self.actor_name}'
модель фильма :
from django.db import models
from django.db.models import CASCADE
from director.models import Director
class Movie(models.Model):
movie_name = models.fields.CharField(verbose_name='movie name', max_length=25, unique=True)
production_year = models.IntegerField(verbose_name='production year')
actors = models.ManyToManyField('actors.actor')
director = models.ForeignKey(Director, on_delete=CASCADE, related_name='movies')
create_time = models.TimeField(verbose_name='Created at', auto_now=True)
update_time = models.TimeField(verbose_name='Updated at', auto_now=True)
def __str__(self):
return f'{self.movie_name}'
def __unicode__(self):
return u'%s' % self.director.director_name
Я нашел способ достичь той же цели (получить количество фильмов для каждого актера, в который он/она внес свой вклад), используя встроенную функцию count() с __set
def movies_count(self, obj):
return obj.movie_set.count()
но вопрос все еще возникает, что означает исключение can't adapt type?! и почему это происходит с сырым запросом?!