Django: smart-select ChainedForeignKey / цепной выпадающий список в админке
Hej! :)
У меня есть 5 моделей, которые связаны иерархически друг с другом. Секция -> подразделение -> группа -> класс -> wz
один раздел может иметь несколько подразделений, но одно подразделение может иметь только один раздел (и так далее). Поэтому у меня установлены ForeignKeys:
# models.py
class NaceSection(models.Model):
code = models.CharField(max_length=1, unique=True)
description_english = models.CharField(max_length=500)
class NaceDivision(models.Model):
code = models.CharField(max_length=2, unique=True)
nace_section = models.ForeignKey(NaceSection, on_delete=models.CASCADE, related_name="nace_section")
description_english = models.CharField(max_length=500)
class NaceGroup(models.Model):
nace_division = models.ForeignKey(NaceDivision, on_delete=models.CASCADE, related_name="nace_division")
code = models.CharField(max_length=4, unique=True)
description_english = models.CharField(max_length=500)
У меня есть модель, в которой все эти поля интегрированы как M2M поля с выпадающей опцией. Моя цель - получить только те подразделения, которые находятся в уже выбранном разделе в области администратора. (и так далее)
Я попробовал smart-select ChainedForeignKey:
# models.py
class Institution(models.Model):
nace_sections = models.ManyToManyField(
NaceSection,
related_name="nace_sections"
)
nace_divisions = ChainedForeignKey(
NaceDivision,
chained_field="nace_sections",
chained_model_field='nace_sections',
blank=True,
)
nace_group = ChainedForeignKey(
NaceGroup,
chained_field="nace_divisions",
chained_model_field='nace_divisions',
blank=True,
)
Организация и выпадающий список в области администратора не меняются вообще, и мое представление с таблицей всех моих результатов говорит мне ('42S22', "[42S22] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid column name 'nace_divisions_id'. (207) (SQLExecDirectW)")
При использовании ChainedManyToManyField ничего не происходит. Кто-нибудь знает, что происходит не так? Любая помощь приветствуется! :)
nace_sections указано как models.ManyToManyField в вашем коде
1.Change from ManyToManyField to ForeignKey.
1.2.Переименовать значения chained_model_field
-->nace_sections to nace_section
-->nace_отделы к nace_отделу
class Institution(models.Model):
nace_sections = models.ForeignKey(
NaceSection,
related_name="nace_sections"
, on_delete=models.CASCADE
)
nace_divisions = ChainedForeignKey(
NaceDivision,
chained_field="nace_sections",
chained_model_field='nace_section',
blank=True,
)
nace_group = ChainedForeignKey(
NaceGroup,
chained_field="nace_divisions",
chained_model_field='nace_division',
blank=True,
)