我需要一個多對多的Django關係;是這樣的:管理Django中的多對多關係
- 我有用戶模型
- 我有位置模型
用戶可以添加多個位置。我需要避免位置中出現重複: 如果更多用戶添加相同位置(即紐約),我將在位置模型中使用單個位置「NewYork」。
當用戶刪除一個位置時,如果沒有其他用戶鏈接到該位置,位置表中的相應元素也將被刪除。
我應該如何處理這種情況?
我需要一個多對多的Django關係;是這樣的:管理Django中的多對多關係
用戶可以添加多個位置。我需要避免位置中出現重複: 如果更多用戶添加相同位置(即紐約),我將在位置模型中使用單個位置「NewYork」。
當用戶刪除一個位置時,如果沒有其他用戶鏈接到該位置,位置表中的相應元素也將被刪除。
我應該如何處理這種情況?
所以我們說:
class Location(models.Model):
name = models.CharField(unique=True)
class User(models.Model):
locations = models.ManyToManyField(Location, through='UserLocation')
name = models.CharField(unique=True)
class UserLocation(models.Model):
user = models.ForeignKey(User)
location = models.ForeignKey(Location)
你可能不需要明確定義一箇中間表,但讓我們在這裏使用它講清楚。這是一個簡單的多對多設置。
當用戶刪除某個位置時,您將刪除相應的UserLocation條目。然後,您可以查詢UserLocation表,查看該位置的任何實例是否保留給其他用戶。如果不是,請刪除該位置。
例如:比利和莎莉是用戶。比利添加了紐約,這是一個新的地點。您創建位置條目,然後創建UserLocation條目。現在莎莉加了紐約。紐約已經在那裏,所以你只需要爲她創建UserLocation。
後來,莎莉刪除了紐約。首先刪除UserLocation條目,然後檢查並看到Billy還有紐約條目,因此您只能離開該位置。現在比利刪除了紐約。在刪除他的UserLocation條目後,您看到紐約沒有更多的實例,因此您可以刪除該位置。
也許你會通過重寫UserLocation delete()方法來檢查和刪除位置嗎?
可能出現[限制每個用戶對每本書的單個評級:Django ORM](http://stackoverflow.com/questions/41703940/restricting-single-rating-on-each-book-by-each-user -django-orm) – e4c5
你能告訴我們代碼你試過了什麼嗎? – alphiii