老实说,要处理项目中的2个选项( ManyToManyField或ForeignKey ),
假设我们有以下模型,其中 Project 可以具有多个 Assignments 。
第一个选项:
class Project(models.Model):
title = #
class Assignment(models.Model):
project = models.ForeignKey(Project,on_delete=models.CASCADE,
related_name='assignments')
使用ForeignKey,在删除项目时,所有相关的作业也将被删除(完美)
第二个选项:
class Project(models.Model):
assignments = models.ManyToManyField("Assignment")
class Assignment(models.Model):
# fields
对于ManyToManyField,在删除项目时,如果我需要删除所有相关的分配,则必须使用 signal
从性能和清晰度的角度来看,选择了什么选项?
答案 0 :(得分:1)
如果您的关系中仅需要一个元素,则应使用与OneToManyField相同的ForeignKey
如果您需要与对象相关的同一类中的许多元素,则应使用ManyToMany ...
简单比较,在Django管理员ForeignKey中仅呈现一个选择,因此您只能按时间选择1个元素...而ManyToMany Widget则可以选择多个选项