【发布时间】:2020-05-09 19:12:18
【问题描述】:
我希望用户能够为项目选择清单,但我认为连接需要在项目和清单的项目之间,而不是清单本身。这是为了允许额外的布尔字段来标记项目是否已针对特定项目完成。
但是我只希望用户选择清单名称 - 那么我将如何编写应用程序以在选择清单时自动创建适当的 junction_project_checks 记录?
project(models.Model):
name = models.CharField(max_length=100)
checklist = models.ManyToManyField(checklist)
checklist(models.Model):
name = models.CharField(max_length=100)
checks = models.ManyToManyField(checks, through='junction_checklist_checks')
checks(models.Model):
name = models.CharField(max_length=100)
body = models.TextField()
junction_checklist_checks(models.Model):
checklist_id = models.ForeignKey(checklist, on_delete=models.CASCADE)
checks_id = models.ForeignKey(checks, on_delete=models.CASCADE)
junction_project_checks(models.Model):
checks_id = models.ForeignKey(checks, on_delete=models.CASCADE)
project_id = models.ForeignKey(project, on_delete=models.CASCADE)
checkbox = models.BooleanField(default=False)
【问题讨论】:
-
你用
myckecklist.checks.create(name='foo', body='bar')创建一个新的? -
除非我有误解,否则这将创建新的检查。但是检查已经创建并与特定的检查表相关联,我指的是项目和检查之间的关联。因此,如果项目 3 选择清单 1,并且清单 1 包含检查 5-10 - 我需要项目 3 和检查 5-10 之间的关联以及每个检查的布尔字段。如果项目 3 和清单 1 之间的连接被删除,这些自动创建的字段也会被删除。
-
那么你使用
mychecklist.checks.add(mycheck)。