我有一个模特;关注这个问题,重要的是两个领域一个是其他模型计划的外键,另一个是选择领域,如下所示:
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
对象; (2,“公司”)然后CHOICES
将更新为:
CHOICES = (
(1, 'A1'),
(2, 'A2'),
(3, 'A3'),
(4, 'B1'),
(5, 'B2'),
)
我可以在表单字段的帮助下在视图中实现这一点,但在这种情况下,我必须处理它以查看和管理,因此我正在寻找一种更好,更简单的方法来实现这一点。
我能够在模型中使用clean()
方法引发错误,但我想更新CHOICES
而不是仅仅引发异常。
在创建第一个条目时,我已经设置了多部分表单并实现了创建解决方案,但是对于Django Admin中的编辑,自定义视图似乎我必须单独处理它们。而不是这样做我想要一种方式,以便我可以更新它一次,以便在django管理员或自定义视图中创建和编辑我只需要覆盖单个方法。
如果您希望它是交互式的(即当用户在UI中更改has_plan
时,类别可用选项发生变化),您需要实现一些客户端逻辑。如果是这种情况我建议您只需在模型中添加clean
方法来检查category
,has_plan
对的正确性。 clean
方法也将在Django管理模型表单中调用。
更新问题/评论,如果某种方式has_plan
有固定的价值,你需要另一个解决方案。