python - 在 Django + SQL 中使用多对多的最佳方法
问题描述
我正在制作一个网络应用程序,我希望在模型中使用多对多字段。我之前没有考虑太多,只是在模型中使用了多对多字段,但现在我在想这些多对多实际上是如何存储在数据库以及在模型中使用多对多字段时最好的方法是什么。
方法一:
class Company(models.Model):
name = models.CharField(max_length = 190,blank = False,null = False)
about = models.CharField(max_length = 260,blank = False,null = True)
website = models.URLField(blank = False)
address = models.OneToOneField(Address,related_name="org_address",on_delete=models.SET_NULL,null=True)
admin = models.ManyToManyField(User,related_name="org_admin",blank = False)
created_on = models.DateTimeField(default = timezone.now)
updated_on = models.DateTimeField(default = timezone.now)
或方法 2:
class Company(models.Model):
name = models.CharField(max_length = 190,blank = False,null = False)
about = models.CharField(max_length = 260,blank = False,null = True)
website = models.URLField(blank = False)
address = models.OneToOneField(Address,related_name="org_address",on_delete=models.SET_NULL,null=True)
created_on = models.DateTimeField(default = timezone.now)
updated_on = models.DateTimeField(default = timezone.now)
class CompanyAdmin(models.Model):
admin = models.ManyToManyField(User,related_name="org_admin",blank = False)
company = models.ForeignKey(Company,related_name="company",on_delete=models.CASCADE)
两种方法是否以相同的方式处理多对多字段?
我使用 MySQL 作为数据库
更新“为了使它们等效,第二种方法应该将字段作为ForiegnKey而不是多对多”也以避免多个公司管理员条目字段公司应该是一对一的。
解决方案
不要创建连接表,因为 Django ORM 会自行处理。
解决方案
推荐阅读
- python - Selenium find_elements By.XPATH 试图提取 href urls 错误
- google-cloud-platform - Google Cloud 文字转语音字符数
- brython - 在 Object._b_.NotImplementedError.$factory 处出错(使用 Brython 在 $make_exc 处进行评估
- mongodb - 如何在 MongoDB 中获取具有最小值的文档?
- c - C中简单线程池和TCP监听器的问题
- sql-server - T-SQL 计算层次结构/父级
- nginx - Nginx 从同一 IP 地址上的另一个端口提供 Iframe
- spring - EhCacheManager bean 总是返回 Null
- node.js - “请求”类型上不存在属性“版本”
' - python - Python 3.7 - 打印 NumPy 数组列表在实际数组前面打印“数组”。为什么?