【问题标题】:How to relate fields in Django Admin?如何关联 Django Admin 中的字段?
【发布时间】:2018-11-28 13:37:45
【问题描述】:

在一个模型中,我有一个 DecimalField“first_arg”和一个多选 CharField“second_arg”。

我想实现以下目标: 在管理面板中,如果为“second_arg”字段选择了特定选项(例如“B”),则将插入到“first_arg”表单字段的任何值增加 2。它应该只发生在 UI 级别。 正确的做法是什么?

由于它是管理 UI 的一部分,因此修改模型应该是错误的。另一方面,我在文档中找不到任何关于它的信息。我想过在静态文件中简单地使用一些 JS,但这有点 hacky。有没有优雅的方式在 Django Admin 中做这些事情?

型号代码:

a = "a"
b = "b"
etc = "etc"
RELEVANT_OPTIONS = (
    (a, "A"),
    (b, "B"),
    (etc, "etc")
)


class MyModel(models.Model):

    first_arg = models.DecimalField(
        max_digits=4,
        decimal_places=2,
        blank=True, null=True
    )
    second_arg = models.CharField(
        choices=constants.RELEVANT_OPTIONS,
        max_length=20,
        blank=True, null=True
    )

    class Meta:
        abstract = True

【问题讨论】:

  • 我不完全确定您的最终目标是什么。您是否尝试更新 UI 以便在 second_arg 更改时更新 first_arg 字段,或者您是否希望实际更新模型的已保存 first_arg 字段?
  • 我正在尝试更新 UI,只是我编写的表单字段。编辑以使其更清晰。是的,如果“second_arg”设置为特定值,我正在尝试通过“first_arg”上的常量执行加法。

标签: python django django-models django-forms django-admin


【解决方案1】:

我认为您将不得不覆盖模板并提供一些 JavaScript。它是相当可扩展的,不太“hacky”(即您不必覆盖整个管理模板):

我知道的所有其他选项都会影响服务器端的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-28
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2015-02-08
    相关资源
    最近更新 更多