2
我想弄清楚如何在Django應用程序中唯一標識ManyToMany關係。我有類似以下型號:在Django中唯一標識ManyToMany關係
class City(models.Model):
name = models.CharField(max_length=255)
countries = models.ManyToManyField('Country', blank=True)
class Country(models.Model):
name = models.CharField(max_length=255)
geo = models.ForeignKey('Geo', db_index=True)
class Geo(models.Model):
name = models.CharField(max_length=255)
我使用ManyToManyField
類型爲countries
場,因爲我想避免城市名稱重複(即有可能是一個城市的名字,如「春」出現在多個位置) 。
在我的應用程序的另一個地方,我想能夠唯一地識別城市與國家之間的地理關係。也就是說,我需要知道,一個用戶的城市是「斯普林菲爾德」,例如居住在美國,而不是加拿大。因此,我需要知道我的城市所映射的ManyToManyField
關係中的哪一個。我的用戶看起來像這樣:
class MyUser(models.Model):
# ... other fields ...
city = models.ForeignKey('City', db_index=True, blank=True, null=True)
這個設置顯然不能正確捕捉城市和國家之間的關係。捕捉獨特關係的最佳方式是什麼?我會使用自定義through-table和AutoField
作爲關鍵字,並將我的用戶更改爲指向該直通表?
是否'geo'真正需要的是在通過表?一個國家只能處於一個地理位置,因此是'ForeignKey'引用。我覺得我可以根據需要通過簡單的連接獲得地理位置... –
啊,你說得對。我會改變我的答案。 –