【问题标题】:(Django) automatic record creation for checklist?(Django)清单的自动记录创建?
【发布时间】: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)

标签: python django


【解决方案1】:

您可以使用以下命令创建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 命名,而不是 snake_case,所以它应该是:Check 而不是 checks

【讨论】:

  • 感谢您的帮助,如果您有时间,我非常感谢您查看我的另一个问题 - link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-07
相关资源
最近更新 更多