Django Admin | Фильтр выпадающего списка Many to Many на основе выбора отношения по внешнему ключу
Я пытаюсь понять лучший способ горизонтальной фильтрации в Django Admin на модели, которая имеет отношение Many to Many. Цель состоит в том, чтобы в секции Inline, когда один выпадающий список заполнен, следующий за ним выпадающий список, который имеет связь внешнего ключа с первым выпадающим списком, был отфильтрован.
Существуют TypeSet и TypeValues, TypeSet имеет множество TypeValues например, если тип TypeSet - "дерево", то типы TypeValue будут ["дуб", "вишня", "орех"]
Затем эти значения типа образуют отношения "многие-ко-многим" с "Вещью" (вместе с включенным TypeSet_id)
Цель - в ThingTypeInline в Django Admin при создании новой вещи я могу выбрать TypeSet из выпадающего списка, который затем отфильтрует выпадающее TypeValue рядом с ним.
Это будет пользовательская форма?
Модели:
class TypeSet(models.Model):
"""TypeSet to be used to describe data type"""
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
type = models.CharField(max_length=255, unique=True)
.....
class TypeValue(models.Model):
"""TypeValue to be used to describe value in the TypeSet"""
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
type = models.CharField(max_length=255)
type_set = models.ForeignKey(
TypeSet,
on_delete=models.CASCADE
)
.......
class Thing(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
types = models.ManyToManyField(
TypeValue, through='ThingType')
..........
class ThingType(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
thing = models.ForeignKey(Locale, on_delete=models.CASCADE)
type_set = models.ForeignKey(TypeSet, on_delete=models.CASCADE)
type_value = models.ForeignKey(TypeValue, on_delete=models.CASCADE)
.......
Admin:
class ThingTypeInline(admin.TabularInline):
model = models.ThingType
class ThingAdmin(admin.ModelAdmin):
inlines = [
LocaleTypeInline,
]