Я разрабатываю веб-приложение с Django для конструкторского бюро моей фирмы.Мы проектируем и строим приводы.Поэтому в скором времени пользователям с правами администратора необходимо вводить данные через системы CRUD Django.
Для большинства моделей этого достаточно.Но для некоторых табличных отношений мне нужно разработать пользовательскую форму администратора с динамическим содержимым.Пожалуйста, рассмотрите следующие модели:
# Functional Block
class Block(models.Model):
block_id = AutoField()
name = CharField()
# Metric System (g, kg, daN...)
class Unit(models.Model):
unit_id = AutoField()
name = CharField()
abbrebiation = CharField()
# Block Performance
class Performance(models.Model):
performance_id = AutoField()
name = CharField()
code = CharField()
type = PositiveSmallInterger()
unit = ForeignKey()
# Instance of a Block
class BlockInstance(models.Model):
instance_id = AutoField()
block = ForeignKey(to='Block)
name = CharField()
# Performance Value for a specific BlockInstance and a given Performance
class PerformanceValue(models.Model):
performance_value_id = AutoField()
block_instance = ForeignKey(to='BlockInstance')
performance = ForeignKey(to='Performance')
doc = CharField()
tolerance = FloatField()
value = FloatField()
Это в основном наиболее важные (упрощенные) классы.
Хитрость заключается в том, чтобы захватить модель BlockInstance.Идеальным сценарием может быть:
- Захват соответствующего блока модекла BlockInstance с помощью раскрывающегося списка (ОК).
В зависимости от выбранного блока мне нужно динамическое поведение:
Наличие TabularInline
, заполненного фиксированным количеством строк.Количество строк = количество Peformance
данного связанного блока.Для каждой строки мне нужно иметь поля только для чтения, связанные с Performance
(имя, код, тип, единица измерения), а затем редактируемые поля PerformanceValue
(документ, допуск, значение).
Я даже не знаю, выполнимо ли это с текущими функциями Django, я провел несколько часов в документе и не нашел никакого существующего решения.
Итак, что я планирую сделать:
Написаниемодуль Javascript, чтобы поймать «изменение» в выпадающем списке Block
.Запись запроса в представление django для извлечения «производительности» Block
Генерация html-кода с необходимым атрибутом «id_xxxx», чтобы вхождения PerformanceValue
были правильно сохранены в инфраструктуре Django.
IПонятия не имею, если это Django-способ - сделать это, это очень конкретный вариант использования.
Любое предложение, критик приветствуется.
Z.