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_ 考虑 if指向对象; (2,“公司”)然后将更新为:categoryMyModelhas_planhas_planPlanplan_nameCHOICES

CHOICES = (
        (1, 'A1'),
        (2, 'A2'),
        (3, 'A3'),
        (4, 'B1'),
        (5, 'B2'),
    )

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

我可以使用clean()模型中的方法引发错误,但我想更新CHOICES而不是仅仅引发异常。


更新:

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

4

1 回答 1

0

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

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

于 2017-12-25T08:58:46.253 回答