首页 > 解决方案 > Django 模型设计 - ManyToManyField 或 ForeignKey:选择选项

问题描述

为了处理项目中的 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,在删除项目时,所有相关的assignment也会被删除(完美)

第二个选项:

class Project(models.Model):
    assignments = models.ManyToManyField("Assignment")

class Assignment(models.Model):
    # fields

使用ManyToManyField,在删除项目时,如果我需要删除所有相关的分配,我必须使用信号

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

标签: djangodjango-models

解决方案


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

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

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


推荐阅读