【发布时间】:2012-02-07 09:22:36
【问题描述】:
假设我有以下模型:
class ScoutBook(models.Model):
troop = models.ForeignKey('Dictionary', limit_choices_to={'type' : 'Troop'}, related_name='+', blank=True, null=True)
class Dictionary(models.Model):
name = models.CharField(max_length=CHAR_FIELD_MAX_LEN, verbose_name="Nazwa")
active = models.BooleanField(verbose_name="Aktywny")
type = models.CharField(max_length=CHAR_FIELD_MAX_LEN, choices=DICTIONARY_CHOICES)
我想实现以下逻辑:
在创建 ScoutBook 时允许用户仅选择现役部队,并且在编辑时允许选择现役部队或允许用户保持值不变(即使部队处于非活动状态)。如果我使用 limit_choices_to = {..., 'active' = True} 不活动的部队,则 django admin 的组合框中不存在。
所以要明确一点:假设这个系统中有四个部队:Troop1、Troop2 和InactiveTroop、InactiveTroop2。在创建模型时,我希望用户能够选择 Troop1 和 Troop2。如果模型的部队字段设置为InactiveTroop2,我希望用户能够在InactiveTroop2、Troop1 和Troop2 之间进行选择。
我正在查看 django forms api,但没有找到明显的方法。此外,在我正在开发的应用程序中,会有很多这样的领域和许多这样的模型——所以解决方案必须是无痛的。我宁愿不为每个模型创建新的 Form 类。我将主要使用 django admin 来启用编辑数据库,以及一些仅列出条目的只读视图。
理想情况下,我想将此功能封装在一些自定义字段中——但字段可以在验证和保存阶段访问模型实例——所以当我生成表单字段时我无法访问它。
【问题讨论】:
标签: python django django-models model django-forms