Django - Как реализовать связь ForeignKey в forms.ModelForm

Всем привет. Моя задача: реализовать форму в которой выбор значения второго поля зависит от значения первого поля. (Например, если в первом поле указано значение Легковой транспорт, то во втором поле должен появится выбор седан/универсал и т.д., если в первом поле указано Коммерческий транспорт, то во втором поле должны появится самосвал/кран/автобус и т.д.)

Код models.py:

class TypeTransport(models.Model):
    transport_name = models.CharField(max_length=100, verbose_name='Тип транспорта')


class TypeBodyTransport(models.Model):
    transport = models.ForeignKey(TypeTransport, on_delete=models.CASCADE, blank=True, null=True,
                                  verbose_name='Тип транспорта')
    body_name = models.CharField(max_length=100, verbose_name='Тип кузова')


class Advertisement(models.Model):
    transport = models.ForeignKey(TypeTransport, on_delete=models.SET_NULL, blank=True, null=True,
                                  verbose_name='Тип транспорта')
    body = models.ForeignKey(TypeBodyTransport, on_delete=models.SET_NULL, blank=True, null=True,
                             verbose_name='Тип кузова')

Код forms.py:

class CreateAdvertisementForm(forms.ModelForm): 
    transport = forms.ModelChoiceField(queryset=TypeTransport.objects.all(), to_field_name="transport_name")
    body = forms.ModelChoiceField(queryset=TypeBodyTransport.objects.filter(transport=transport),
                                  to_field_name="body_name")
    class Meta:
        model = Advertisement
        fields = ('transport', 'body')

Думал что получится указать зависимость с помощью filter(transport=transport), но возвращается такая ошибка: TypeError: Field 'id' expected a number but got <django.forms.models.ModelChoiceField object at 0x7f40d7af5ac0>.

Подскажите пожалуйста, как правильно реализовать нужную мне фичу?

Оказалось все намного проще, все это решается с помощью библиотеки django-smart-selects. Из дополнительного могу сказать что в формах надо убрать поле с указанием на ModelChoiceField, потому что оно мешает своим параметром queryset. Я поскольку еще новичок, не сразу догадался что проблема в зависимых select-ах (Вопрос отредактировал).

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