Как проверить поле выбора формы django с динамически генерируемыми вариантами выбора? - PullRequest
0 голосов
/ 07 мая 2019

У меня есть форма Django с ChoiceField, использующая динамически генерируемые варианты.Movie_dict_list генерируется API (themoivedb), когда для поиска отправляется другая форма с названием фильма.Затем Movie_dict_list передается MovieChoiceForm в качестве kwarg во время инициализации и используется для создания списка выбора.

class MovieChoiceForm(forms.Form):

    def __init__(self, *args, **kwargs):
        #Generate choices
        if 'movie_dict_list' in kwargs:
            movie_dict_list = kwargs.pop('movie_dict_list')
            if movie_dict_list:
                movie_choice_list = [(
                    movie_dict,
                    "{} ({})".format(movie_dict['title'], movie_dict['release_year']), 
                    ) for movie_dict in movie_dict_list]
            else:
                movie_choice_list = [(None, 'No Results')]
        else:
            movie_choice_list = [(None, 'No Results')]

        super(MovieChoiceForm, self).__init__(*args, **kwargs)

        #create field
        self.fields['select_movie'] = forms.ChoiceField(required=False, 
choices=movie_choice_list, widget=forms.Select, label='Select Result')

Проблема возникает при проверке формы путем вызова .is_valid () для новой формы, созданной из данных request.POST.Поскольку новая форма не передает ранее сгенерированный movie_dict_list в качестве аргумента ключевого слова, она не имеет того же списка вариантов выбора (его единственный выбор должен быть Нет) для проверки и возвращает ошибку

"Выберите правильный вариант. {'Title': 'Star Wars', 'release_year': '1977', 'id': 11} не является одним из доступных вариантов."

TheЕдинственное, о чем я могу думать, - это снова запросить API базы данных фильмов, чтобы получить еще одну копию movie_dict_list, но это не похоже на отличное решение.Прямо сейчас поиск и выбор - это разные формы, поэтому мне придется объединять их, проверять только заголовок поиска, запрашивать API, если заголовок поиска действителен, а затем проверять выбор.И даже если бы все это работало, я удваиваю свои поисковые запросы API к базе данных фильмов.

У кого-нибудь есть элегантное решение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...