Я очень новичок в python и Django и хотел попробовать, создав веб-интерфейс для моей личной библиотеки мультимедиа.
Я создал пользовательское действие администратора, которое запрашивает TMDB API хранить информацию о фильмах в моей БД.
Если есть несколько результатов для mov ie, я перенаправлен на промежуточную страницу с помощью ChoiceField (), чтобы выбрать соответствующую.
Вот проблема, когда я проверяю промежуточную страницу он добавляет мой выбор в базу данных, но прекращает обработку других запрошенных фильмов ...
Я предполагаю, что проблема возникает для перенаправления после обработки формы, но я не могу понять это.
Спасибо за помощь, ребята!
admin.py
class MovieAdmin(admin.ModelAdmin):
actions = ['parse']
list_display = ['title', 'year', 'status']
change_list_template = "admin/movies_changelist.html"
def parse(self, request, queryset):
if 'apply' in request.POST:
form = MovieSelectForm(request.POST)
res = ast.literal_eval(request.POST['res'])
for r in res:
if r['id'] == int(request.POST['Movies']):
update_movie_infos(request.POST['_selected_action'], r)
return HttpResponseRedirect(request.get_full_path())
SELECTED_MOVIES = []
for movie in queryset:
if movie.status == 'UN':
# Building API Request
api_key = '8a260244852cbd90bc5662e721a2d685'
uri = 'https://api.themoviedb.org/3/search/movie'
req = requests.get(uri, {
'api_key': api_key,
'query': movie.title,
'year': movie.year,
'language': 'fr-FR'
}).json()
res = req['results']
if len(res) == 1:
update_movie_infos(movie.pk, res[0])
self.message_user(
request, '{} parsed successfully.'.format(movie.title))
elif len(res) == 0:
self.message_user(request, '{}: no results.'.format(
movie.title), level='error')
else:
self.message_user(
request, '{}: Please choose the movie corresponding.'.format(movie.title), level='warning')
for r in res:
SELECTED_MOVIES.append((r['id'], r['title']))
form = MovieSelectForm(SELECTED_MOVIES)
return render(request, 'admin/TMDB_multiple_results.html', {
'_selected_action': queryset.values_list('pk', flat=True),
'entry': movie.pk,
'res': res,
'form': form
})