Настройте ModelAdmin и TabularInline с динамическим поведением - PullRequest
0 голосов
/ 10 февраля 2019

Я разрабатываю веб-приложение с 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...