Как создать зависимую выпадающую форму в Django

Я долго и безуспешно искал ответ на этот вопрос. Я хотел бы создать простую зависимую выпадающую форму в Django. Первое поле должно быть "отработкой", которую нужно выбрать, а второе поле должно быть models.PositiveIntergerField() с некоторыми валидаторами в нем, приходящими из модуля django.core.validators. Я бы хотел, чтобы это целое число зависело от количества "упражнений" в выбранной "тренировке" (упражнение имеет внешний ключ к тренировке). Когда пользователь выберет тренировку, количество упражнений будет зависеть от того, сколько упражнений на самом деле в этой тренировке. Пока что мне удалось получить первое поле, но не целочисленное поле. Ниже приведены forms.py, views.py, model.py и routine.html моего приложения.

forms.py - настройте его так, чтобы пользователь мог видеть только созданные им тренировки и упражнения

from django import forms
from .models import Workout, Exercise, Routine
class RoutineForm(forms.ModelForm):
    """creates a form for a routine"""

    def __init__(self, *args, user=None, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['workout'].queryset = Workout.objects.filter(owner=user)

    class Meta:
        model = Routine
        fields = ['workout']
        labels = {'workout': '',}

views.py

from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from .models import Workout, Exercise
from .forms import RoutineForm

@login_required
def routine(request):
    """display a dropdown of all workouts for a user"""
    if request.method != 'POST':
        form = RoutineForm(user=request.user) #creating a form here with user id in mind
        #the request has a user attribute because we know who is requesting this information
    else:
        form = RoutineForm(data=request.POST, user=request.user) #loading data from form with user id in mind
        if form.is_valid():
            form.instance.owner = request.user
            new_routine = form.save()
            return redirect('index')
    context = {'form':form}
    return render(request, 'routine_workouts_app/routine.html', context)

models.py

from django.db import models
from django.contrib.auth.models import User
from django.core.validators import MaxValueValidator, MinValueValidator

class Routine(models.Model):
    """Shows a routine"""
    workout = models.ForeignKey(Workout, on_delete=models.CASCADE) #does not have and id attribute bc it is a key not an object
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    #num_of_exercises = models.PositiveIntegerField(default=0, validators=[MaxValueValidator(#integer I need based off of workout), MinValueValidator(0)])

    def __str__(self):
        return 'this is a routine'

routine.html

{% extends 'routine_workouts_app/base.html' %}

{% block content %}
    <p>this is the home page for creating routines</p>
    <form action="{% url 'routine_workouts_app:routine' %}" method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <button name='submit'>create routine</button>
    </form>
{% endblock content %}

Этот код работает, но не в той степени, в которой я хочу. Я читал на многих сайтах о jQuery, Ajax, django-2select и других вещах, но у меня были проблемы с их реализацией и я застрял где-то на полпути. Есть предложения, как реализовать зависимую выпадающую форму? Есть ли какие-нибудь учебники по этой теме? Сайты с подробным объяснением? Я прилагаю фотографию того, как выглядит мое приложение с предоставленным кодом.

photo of working single dropdown

Вернуться на верх