【发布时间】:2018-06-06 13:43:09
【问题描述】:
我有一个模型;对于这个问题,重要的是两个字段一个是其他模型计划的外键,另一个是选择字段,如下所示:
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")
我想根据has_plan 的选择更新MyModel 的category 字段中的CHOICES。
考虑has_plan 是否指向Plan 对象和plan_name; (2, "Company") 然后CHOICES 将更新为:
CHOICES = (
(1, 'A1'),
(2, 'A2'),
(3, 'A3'),
(4, 'B1'),
(5, 'B2'),
)
我可以在表单字段的帮助下在视图中实现这一点,但在这种情况下,我必须为视图和管理员处理它,因此我正在寻找一种更好、更简单的方法来实现这一点。
我可以在模型中使用 clean() 方法引发错误,但我想更新 CHOICES 而不仅仅是引发异常。
更新:
在创建第一个条目时,我已经设置了多部分表单并实现了创建解决方案,但是对于在 Django Admin 中进行编辑,自定义视图似乎我必须分别处理两者。 而不是这样做,我想要一种方法,以便我可以更新一次,以便在 django 管理员或自定义视图中创建和编辑,我只需要覆盖单个方法。
【问题讨论】:
-
你在前端选择has_plan?如果正确,则使用 jquery 或 javascript 更新选择框选项。
-
但我也想在 django 的默认管理视图中处理它,我也必须处理它,所以我正在寻找一种方法,如果我可以更改/更新 CHOICES,那么我不会必须分别处理视图和管理
-
在我看来,你不能那样做。但我不确定,在网上搜索。
-
@Sagar 我已经在问题中提到我已经能够将它与表单一起使用,但这让我总共有 4 个案例来处理在 UI 中创建和编辑,在管理员中创建和编辑
标签: python django python-3.x django-models django-2.0