Django模型设计-ManyToManyField或ForeignKey:选择选项

时间:2018-07-04 17:20:18

标签: django django-models

老实说,要处理项目中的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

从性能和清晰度的角度来看,选择了什么选项?

1 个答案:

答案 0 :(得分:1)

如果您的关系中仅需要一个元素,则应使用与OneToManyField相同的ForeignKey

如果您需要与对象相关的同一类中的许多元素,则应使用ManyToMany ...

简单比较,在Django管理员ForeignKey中仅呈现一个选择,因此您只能按时间选择1个元素...而ManyToMany Widget则可以选择多个选项