我有2个型号:城市和服务。每个城市记录可以包含许多服务,每个服务都可以链接到每个城市。
class City(models.Model):
name = models.CharField(max_length=255, unique=True)
class Service(models.Model):
name = models.CharField(max_length=255, unique=True)
class CityService(models.Model):
city = models.ForeignKey(City)
service = models.ManyToManyField(Service)
我使用 ManyToManyField 来启用Django admin中的多个选择。 但是Django又创建了一个用于存储m2m关系的表格。
是否可以配置Django模型以便达到以下表结构:
+----+---------------+------------+
| id | city_id | service_id |
+----+---------------+------------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 3 |
+----+---------------+------------+
答案 0 :(得分:1)
你误解了ManyToManyField
用法。
您无需创建单独的模型即可使用此关系。要创建一个单独的模型以作为ManyToManyField
关系工作,请参阅下面的内容。但这样做您将无法使用Django
为此manytomany
关系提供的功能。
class CityService(models.Model):
# Also you can add additional fields
city = models.ForeignKey(City)
service = models.ForeignKey(Service)
class Meta:
unique_together = ('city', 'service') # Make sure you dont have duplicate record in the table if so then remove this relation.
但是如果你想使用Django提供的ManyToManyField
关系,让他们创建一个单独的表。只需使用下面的代码.. @Jedi已经提出了同样的建议。
class City(models.Model):
name = models.CharField(max_length=255, unique=True)
class Service(models.Model):
name = models.CharField(max_length=255, unique=True)
city = models.ManyToManyField(City)
答案 1 :(得分:0)
根本不需要CityService表。 ManyToManyField 已经意味着一个连接表;你正在创建一个第二个,根本没有任何目的。在城市和服务之间直接使用M2M。
答案 2 :(得分:0)
为什么不使用像这样的结构:
class Service(models.Model):
name = models.CharField(max_length=255, unique=True)
class City(models.Model):
name = models.CharField(max_length=255, unique=True)
service = models.ManyToManyField(Service)