Заполнение одного поля в django Admin в зависимости от значения предыдущего поля

Я встроил следующий код в свое приложение

models.py

class AnoLetivo(models.Model):

     # regex for name validation
     name_message = 'Formato "aaaa/aaaa". Exemplo: 2020/2021'
     name_regex = RegexValidator(
         regex=r'^\d{4}\/\d{4}$',
         message=name_message,
     )
     name = models.CharField(
         'Designação',
         validators=[name_regex],
         max_length=12,
         unique=False,
         blank=False,
         help_text='Insira um ano letivo com o formato "aaaa/aaaa". Exemplo: 2020/2021'
     )

class Periodo(models.Model):
   
    ano_letivo = models.ForeignKey(
        'AulasPrevistas.AnoLetivo',
        verbose_name='Ano Letivo',
        on_delete=models.CASCADE,
    )
    name = models.CharField(
        'Designação',
        max_length=12,
        unique=False,
        blank=False,
    )

class Feriado(models.Model):
    """ Um modelo para os feriados """

    ano_letivo = models.ForeignKey(
        'AulasPrevistas.AnoLetivo',
        verbose_name='Ano Letivo',
        on_delete=models.CASCADE,
    )
    periodo = models.ForeignKey(
        'AulasPrevistas.Periodo',
        blank=True,
        null=True,
        verbose_name='periodo',
        on_delete=models.CASCADE,
    )
    name = models.CharField(
        'Designação',
        max_length=200,
        unique=False,
        blank=False,
    )

admin.py

class FeriadoForm(forms.ModelForm):

    ano_letivo = forms.CharField(widget=forms.Select(attrs={'onchange': "action_change(this.value);"}))
    

    def __init__(self, *args, **kwargs):
        super(FeriadoForm, self).__init__(*args, **kwargs)
        self.fields['periodo'].queryset = Periodo.objects.filter(
            ano_letivo= ??????? )


class FeriadoAdmin(admin.ModelAdmin):
    """ Criação da Tabela do Feriado no admin """

    form = FeriadoForm

    list_display = [
        'name', 'date', 'tipo', "slug", 'created', 'modified'
    ]
    search_fields = [
        'name', 'date', 'tipo', "slug", 'created', 'modified'
    ]
    list_filter = [
        'name', 'date', 'tipo', "slug", 'created', 'modified'
    ]

    class Media:
        js = ("static/action_change.js",)


admin.site.register(Feriado, FeriadoAdmin)

static/action_change.js

django.jQuery( document ).ready(function() {
    console.log( "ready!" );
    django.jQuery('#id_ano_letivo').change(function() {
      var value = ('#id_ano_letivo').val()
    });
});

На приборной панели Django Admin отображается следующее:

DjangoAdmin

Я хочу иметь возможность заполнять Periodo объекты в зависимости от Ano Letivo объекта, который был выбран.

Например, если я выбираю Ano Letivo: 2022/2023, Periodo должен показать A, B, C опции (объекты периода, связанные с этим Ano Letivo). Если я выбираю Ano Letivo: 2024/2025, Periodo должен показать E, F, D опции.

Я знаю, что должен использовать django.jQuery, но я запутался в этом

кто-нибудь может помочь?

Заранее большое спасибо :)

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