Django Views не сотрудничает при отправке формы - PullRequest
1 голос
/ 24 сентября 2019

У меня есть 3 кнопки, которые должны изменять поведение видео на странице в зависимости от выбранных выпадающих меню.Но пользователь выбирает вариант из выпадающего списка, видео не взаимодействуют.

Это внешний интерфейс.Когда я выбираю что-то, например, на языке, видео должно меняться, но это не так.

This is the front end

Страница заканчивается на http://localhost:8000/?language=EN&level=LEV&category=CAT затем разрывается страница

enter image description here

Я попытался добавить reverse_url для представлений, но это все равно не исправило ошибку.

def home(request):
  filter_form = AMLVideoFilterForm(request.GET)
  videos = AMLVideo.objects.all()

    category = filter_form.data.get('category')
    if category:
        videos = videos.filter(
            category__exact=category
        )

    language = filter_form.data.get('language')
    if language:
        videos = videos.filter(
            language__exact=language
        )

    level = filter_form.data.get('level')
    if level:
        videos = videos.filter(
            level__exact=level
        )

    videos = videos.order_by("-category", "-language", "-level")

    context = {'videos': videos, 'filter_form': filter_form, 'level': level, 'language': language, 'category': category,}
    return render(request, 'home.html', context)

Файл forms.py:

class AMLVideoFilterForm(forms.Form):
    LANGUAGE = [
        ('LAN', 'Language'),
        ('EN', 'English'),
        ('FR', 'French'),
        ('HIN', 'Hindi'),
        ('SPA', 'Spanish'),
        ('GER', 'German'),
    ]

    LEVEL = [
        ('LEV', 'Level'),
        ('BEG', 'Beginner'),
        ('INT', 'Intermediary'),
        ('ADV', 'Advanced'),
    ]

    CATEGORY = [
        ('CAT', 'Category'),
        ('ADN', 'Adventure'),
        ('ANI', 'Animal'),
        ('ENV', 'Environmental'),
        ('MOR', 'Moral'),
        ('FOLK', 'Folktales'),
        ('POE', 'Poems'),
        ('FUN', 'Funny'),
    ]

    language = forms.ChoiceField(
        required=False, 
        choices=LANGUAGE, 
        widget=forms.Select(
            attrs={
                'onchange' : "this.form.submit()", 
                'class':'button waves-effect waves-light btn mt-10 mb-10 center-align'
                }
            )
        )
    level = forms.ChoiceField(
            required=False, 
            choices=LEVEL, 
            widget=forms.Select(
                attrs={'onchange' : "this.form.submit()", 
                'class':'button waves-effect waves-light btn mt-10 mb-10 center-align'
                }
            )
        )
    category = forms.ChoiceField(
            required=False, 
            choices=CATEGORY, 
            widget=forms.Select(
                attrs={'onchange' : "this.form.submit()", 
                'class':'button waves-effect waves-light btn mt-10 mb-10 center-align'
                }
            )
        )

Это шаблон внешнего интерфейса

    <section class="section-padding portfolio-container">
              <div class="container center-align">
                <div class="row">
                  <form method="GET">
                      {{ filter_form }}
                  </form>
                </div>
              </div>
    </section>
    <!-- VIDEOS -->
    <section class="section-padding">
      <div class="container">
            <div class="row">
                <div>
                  {% if videos %}  
                  {% for v in videos %}
                  {% video v.video as my %}
                      <iframe width="{{ 380 }}" height="{{ 225 }}" src="{{ my.url }}" 
                      frameborder="0" allowfullscreen></iframe>
                  {% endvideo %}
                  {% endfor %}
                </div>
            </div> <!-- Row -->
      </div> <!-- container -->
    </section>

Кто-нибудь знаком с этим?

1 Ответ

1 голос
/ 24 сентября 2019

Если вы не выбираете какой-либо фильтр, тогда значения CATEGORY и LEVEL должны быть пустыми, но есть 2 значения CAT и LEV.Вот почему, когда вы фильтруете ваше видео, данные не возвращаются.

Попробуйте сделать значение выбора пустым, если вы его не выбираете, изменив форму следующим образом:

class AMLVideoFilterForm(forms.Form):
    LANGUAGE = [
        ('', 'Choose language'),
        ('EN', 'English'),
        ('FR', 'French'),
        ('HIN', 'Hindi'),
        ('SPA', 'Spanish'),
        ('GER', 'German'),
    ]

    LEVEL = [
        ('', 'Choose level'),
        ('BEG', 'Beginner'),
        ('INT', 'Intermediary'),
        ('ADV', 'Advanced'),
    ]

    CATEGORY = [
        ('', 'Choose category'),
        ('ADN', 'Adventure'),
        ('ANI', 'Animal'),
        ('ENV', 'Environmental'),
        ('MOR', 'Moral'),
        ('FOLK', 'Folktales'),
        ('POE', 'Poems'),
        ('FUN', 'Funny'),
    ]
...