Мне трудно запросить собственный менеджер моделей django в подробном представлении моей функции.Как я могу решить эту проблему?
Я использую django 2.2.
в моем файле models.py, у меня есть этот код ниже, который отлично работает.Запросы для просмотра списка работают нормально, и когда я запрашиваю подробный вид с помощью get_object_or_404 (Modelname, id), подробные представления тоже работают, но когда я пытаюсь запросить его с помощью моего собственного менеджера моделей, я продолжаю получать эту ошибку "movie_detail () получилнеожиданный аргумент ключевого слова 'id' ".
Я также пытался удалить --->
def get_absolute_url(self):
return reverse('core:movie_detail', args=[self.id,])
из моей модели фильма при запросе менеджера модели, но все равно получаю ту же ошибку
Как мне решить эту проблему?
my models.py
class MovieManager(models.Manager):
def all_with_related_persons(self):
qs = self.get_queryset()
qs = qs.select_related('director')
qs = qs.prefetch_related('writers', 'actors')
return qs
class Movie(models.Model):
NOT_RATED = 0
RATED_G = 1
RATED_PG = 2
RATED_R = 3
RATINGS = (
(NOT_RATED, 'NR - Not Rated'),
(RATED_G, 'G - General Audiences'),
(RATED_PG, ' PG - Parental Guidance' 'Suggested'),
(RATED_R, 'R - Restricted'),
)
title = models.CharField(max_length=140)
plot = models.TextField()
year = models.PositiveIntegerField()
rating = models.IntegerField(choices=RATINGS, default=NOT_RATED)
runtime = models.PositiveIntegerField()
website = models.URLField(blank=True)
director = models.ForeignKey(to='Person',
on_delete=models.SET_NULL,
related_name="directed",
null=True,
blank=True)
writer = models.ManyToManyField(to="Person", related_name="writing_credits", blank=True)
actors = models.ManyToManyField(to="Person", through="Role", related_name="acting_credits", blank=True)
objects = MovieManager()
def __str__(self):
return '{} ({})'.format(self.title, self.year)
def get_absolute_url(self):
return reverse('core:movie_detail', args=[self.id,])
class Meta:
ordering = ('-year', 'title',)
<--- Views.py --->
Мой списокview
def movie_list(request):
object_list = Movie.objects.all()
paginator = Paginator(object_list, 12)
page_number = request.GET.get('page', 1)
try:
page = paginator.page(page_number)
except PageNotAnInteger:
# If page is not an integer deliver the first page
page = paginator.page(1)
except EmptyPage:
# If page is out of range deliver last page of results
page = paginator.page(paginator.num_pages)
context = {
'object_list': object_list,
'products': page,
'page': page,
}
template = 'core/movie_list.html'
return render(request, template, context)
DetailView без настраиваемого менеджера моделей. (Это работает)
def movie_detail(request, id):
object_list = get_object_or_404(Person, id=id)
context = {'movie': object_list}
template = 'core/person_detail.html'
return render(request, template, context)
DetailView с настраиваемым менеджером моделей. (Это не работает. Выдает ошибку "movie_detail () получилнеожиданный аргумент ключевого слова 'id' ")
def movie_detail(request):
object_list = Movie.objects.all_with_related_persons()
context = {'movie': object_list}
template = 'core/movie_detail.html'
return render(request, template, context)
Мой путь к URL-адресу detail_view
path('<id>/', views.movie_detail, name="movie_detail"),
Я ожидаю, что в подробном представлении будут возвращаться запросы, основанные на том, что я запросил в моем диспетчере пользовательских моделей.