django - 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,在删除项目时,如果我需要删除所有相关的分配,我必须使用信号
从性能和清晰度的角度来看,选择了什么选项?
解决方案
如果您的关系中只需要一个元素,则应使用与 OneToManyField 相同的 ForeignKey
如果您需要来自与您的对象相关的同一类的许多元素,您应该使用 ManyToMany...
简单比较,在 django admin ForeignKey 中只呈现一个选择,因此您只能按时间选择 1 个元素...而 ManyToMany Widget 您可以选择多个选项
推荐阅读
- python - 在 python 中使用 gevent 的静态 Web 服务器演示
- graphql - 后端可以在 GraphQL 中更新用户查询(突变)吗?
- ios - 如何设置 UITableView 空白空间的 backgroundColor 不同?
- security - 缓冲区溢出 - 如何发现攻击的可能性?
- mysql - MySQL - 我正在尝试过滤 1.1*min(value) 和 0.9*max(value) 之间的值
- c# - 我如何正确实现客户端服务器侦听器并根据传入的服务器数据更新 ui
- c# - 是否可以通过编程方式更改 App.config 内的 connectionString 内的用户/密码?
- linux - 使用 tcp 2222:22 复制内容时,用于内核开发的 QEMU 引导不起作用
- haskell - 堆栈无法安装 intero
- c# - Rest POST API 与 POSTMAN 一起使用,但无法使用 Xamarin.Forms