动态选择字段在另一个字段上过时

时间:2018-09-21 15:06:11

标签: django django-models django-forms django-model-field

我想动态构建Django模型字段的选择列表:

def build_choices(another_model):
    choices = DEFAULT_CHOICES
    if another_model and another_model.show_extra:
        choices = DEFAULT_CHOICES + EXTRA_CHOICES
    return choices

class MyOtherModel(models.Model):
    show_extra = models.BooleanField(default=False)

class MyModel(models.Model):
    another_model = models.ForeignKey(MyOtherModel, blank=True, null=True)
    extra_choices = models.CharField(choices=build_choices(another_model))

这显然不起作用,因为build_choices函数是在加载时进行评估的,并且永远不会进行评估。

我知道我可以在表单类中执行此操作,但是无论是否通过表单或其他方法创建对象,我都希望提供相同的验证。

要注意,动态构建的选择取决于相关的模型实例,如果相关模型不可用(可能是我们第一次实例化MyModel或没有任何another_model关联),则返回默认选择。

我找到了另外一个solution,但似乎有点黑。

我在这里有什么选择?

0 个答案:

没有答案