(Django)为检查表自动创建记录?

我希望用户能够为一个项目选择一个检查单,但是我认为需要在项目和检查单的项目之间建立联系,而不是检查单本身。这是为了允许一个额外的布尔字段来标记某个项目是否已经完成。

然而,我只想让用户选择检查表的名称–那么我如何对应用程序进行编码,以便在选择检查表时自动创建相应的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)

解决方案:

你可以创建一个 checks 对象。

checklist.objects.get(name=name_of_list).checks.create(
    name='value-for-name', body='value-for-body'
)

或者如果检查已经存在,你可以把它添加到检查列表中。

checklist.objects.get(name=name_of_list).checks.add(
    checks.objects.get(name=name_of_check)
)

然而,这种模式有点 “奇怪”。这意味着,一个 checks 对象可以属于不同的列表,这本身并不奇怪,但在一些列表中,该对象可以属于不同的列表。checks 是这样做的,而在其他一些地方则不然。

:通常一个Django模型,就像所有Python中的类都被赋予一个名字一样,在 PerlCase,不 蛇皮箱,所以应该是。Check 而不是 checks.

本文来自投稿,不代表实战宝典立场,如若转载,请注明出处:https://www.shizhanbaodian.com/40403.html

(0)
上一篇 20小时前
下一篇 20小时前

相关推荐

发表评论

登录后才能评论