【问题标题】:conditional/contingent model field choices条件/条件模型字段选择
【发布时间】:2011-10-31 16:19:20
【问题描述】:

如果我的模型有两个模型选择字段,有没有办法让第二个字段的选择集取决于第一个字段中选择的内容。例如,如果给定以下代码,用户为“公司”字段选择 APPLE — 是否可以配置代码以使用户仅显示其“部门”字段选择的 APPLE DIV_CHOICES?

CMP_CHOICES ('Apple', 'Apple Computers'),
            ('MS', 'Microsoft Inc.'),

APPLE DIV_CHOICES ( 'Desktop', 'Desktop'),
          ( 'iOS', 'iOS'),
          ( 'AS', 'AppStore'),

MS DIV_CHOICES ( 'Windows', 'Windows'),
           ( 'Longhorn', 'Longhorn'),
           ( 'Mobile', 'Mobile'),

class Contact(models.Model)
first_name = models.CharField(max_length=64, …)
last_name = models.CharField(max_length=64, …)
company = models.CharField(max_length=100, choices=CMP_CHOICES)
division = models.CharField(max_length=100, choices=DIV_CHOICES)
....

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    没有。选择必须是所有可能的选择。但是,您可以在表单上使用 JavaScript 来限制基于第一个选择的选项,而不是模型本身。

    【讨论】:

    • 当两个人说的基本相同时,我不太确定如何接受一个或另一个答案。谢谢你们。
    【解决方案2】:

    有很多方法可以解决这个问题,这取决于您是使用 django 管理员还是您自己的自定义代码,但开箱即用它不起作用 - 默认情况下,表单中的所有内容都是可选的。

    您最终将在表单级别和模板级别执行此操作,而不是在模型中。您可以创建一个django form wizard 以在多个阶段显示表单。或者,您可以在选择 CMP 字段后使用 javascript 仅显示 APPLE/MS 字段。在选择和验证 CMP 后,您可以变得更花哨并做一些 ajax 来动态加载 APPLE/MS 字段。

    【讨论】:

      猜你喜欢
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 2013-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多