それでは言わせて:
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テーブルを照会できます。そうでない場合は、場所を削除します。
例:BillyとSallyはユーザーです。ビリーは新しい場所であるニューヨークを追加します。 LocationエントリとUserLocationエントリを作成します。今、サリーはニューヨークを追加します。 New Yorkは既にそこにあるので、あなたのためにUserLocationを作成する必要があります。
その後、Sallyはニューヨークを削除します。最初にUserLocationエントリを削除してから、まだBillyのNew Yorkエントリがあるかどうかを確認してください。そのため、Locationだけを残します。 Now Billyはニューヨークを削除します。 UserLocationエントリを削除した後、ニューヨークのインスタンスがなくなり、その場所を削除することができます。
UserLocationのdelete()メソッドをオーバーライドして、場所の確認と削除を行うとしたらどうでしょうか?
[各ユーザーによる各書籍の単一定格の制限:Django ORM](http://stackoverflow.com/questions/41703940/restricting-single-rating-on-each-book-by-each-user)の可能な複製-django-orm) – e4c5
あなたは何を試したのですか? – alphiii