首页 > 解决方案 > 在 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 会自行处理。

标签: pythonmysqldjangomodel

解决方案



推荐阅读