Заполнение одного поля в 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 отображается следующее:
Я хочу иметь возможность заполнять Periodo
объекты в зависимости от Ano Letivo
объекта, который был выбран.
Например, если я выбираю Ano Letivo: 2022/2023
, Periodo
должен показать A, B, C
опции (объекты периода, связанные с этим Ano Letivo).
Если я выбираю Ano Letivo: 2024/2025
, Periodo
должен показать E, F, D
опции.
Я знаю, что должен использовать django.jQuery, но я запутался в этом
кто-нибудь может помочь?
Заранее большое спасибо :)