使用动态行为自定义ModelAdmin和TabularInline

时间:2019-02-10 19:50:09

标签: javascript python django

我正在使用Django为我公司的设计办公室开发WebApp。 我们正在设计和制造执行器。 因此,在短时间内,“管理员”用户需要通过Django的CRUD系统输入数据。

对于大多数模型来说,这就足够了。 但是对于某些表关系,我需要设计一个具有动态内容的自定义管理表单。 请考虑以下型号:

# 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模型。 理想的情况是:

  • 使用下拉列表(OK)捕获BlockInstance模式kl的相关块。

根据所选的块,我需要动态行为:

具有TabularInline,其中填充了固定数量的行。行数=给定相关块的Peformance数。 对于每一行,我需要将只读字段与Performance绑定在一起(名称,代码,类型,单位),然后与PerformanceValue的可食用字段绑定在一起(文档,公差,值)。

我什至不知道它是否可以用于当前的Django功能,我花了几个小时在文档中,没有找到任何现有的解决方案。

所以我打算做的是:

编写一个Javascript模块以捕获Block下拉列表中的“更改”。 向django视图编写查询以检索Block的“性能” 生成具有必要的“ id_xxxx”属性的html代码,以便Django框架可以正确保存PerformanceValue的出现。

我不知道这是否是Django的方式,这是一个非常特定的用例。

任何建议,欢迎批评家。

Z。

0 个答案:

没有答案