Django使用foreignkey在模型中使用动态选择

时间:2017-12-25 06:41:09

标签: python django python-3.x django-models django-2.0

我有一个模特;关注这个问题,重要的是两个领域一个是其他模型计划的外键,另一个是选择领域,如下所示:

class MyModel(models.Model):
    CHOICES = (
        (1, 'A1'),
        (2, 'A2'),
        (3, 'B1'),
        (4, 'B2'),
    )
    category = models.IntegerField(choices=CHOICES, default=3)
    has_plan = models.ForeignKey(Plan, on_delete=models.CASCADE)

以下是我的计划模型:

class Plan(models.Model):
    PLAN_CHOICES = [(1, "Individual"), (2, "Company")]
    plan_name = models.IntegerField(choices=PLAN_CHOICES, default=2)
    plan_validity = models.IntegerField(default=180, help_text="Days after plan expires")

我想根据CHOICES的选择更新category MyModel has_plan字段中可用的has_plan。 考虑Plan是否指向plan_name对象CHOICES; (2,"公司")然后CHOICES = ( (1, 'A1'), (2, 'A2'), (3, 'A3'), (4, 'B1'), (5, 'B2'), ) 将更新为:

clean()

我可以在表单字段的帮助下在视图中实现这一点但在这种情况下我必须处理它以进行视图和管理,因此我正在寻找一种更好,更简单的方法来实现这一点。

我能够在模型中使用CHOICES方法引发错误,但我想更新if (Yii::$app->getSecurity()->validatePassword($password, $hash)) { // all good, logging user in } else { // wrong password } 而不是仅仅提出异常。

更新

创建第一个条目时我已经设置了多部分表单并实现了创建解决方案,但是对于Django Admin中的编辑,自定义视图似乎我必须单独处理它们。 而不是这样做我想要一种方式,以便我可以更新一次,以便在django管理员或自定义视图中创建和编辑我只需要覆盖单个方法。

1 个答案:

答案 0 :(得分:0)

如果您希望它是交互式的(即当用户在UI中更改has_plan时,类别可用选项会更改)您需要实现一些客户端逻辑。如果是这种情况,我建议您只需在模型中添加clean方法,即可检查categoryhas_plan对的正确性。在Django管理模型表单中也会调用clean方法。

如果某种方式has_plan具有固定值并且您需要其他解决方案,请更新问题/评论。