我相對較新的Django模型設計,現在我想要做這樣的事情。Django模型設計:用戶擁有的對象實例,名稱不唯一
假設愛麗絲有三條名爲Road-runner,Pinky和Kiwi的狗。 Bob有一隻叫做Spinner的貓,並且還擁有Pinky和Alice在一起。
所以對象Pet的名稱不是唯一的。寵物可以擁有多個所有者。我認爲這是多對多的關係。
現在在我的意見,我想列出他們自己的寵物。我如何實現它?我知道這與用戶授權和外鍵有關,如果有人能指出一些方向或明確的解釋,那將是很棒的。
我現在有:
class Pet(models.Model):
name = models.CharField(max_length=100)
class Owner(models.Model):
pet = models.ForeignKey(Pet, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
我應該在寵物的對象放在owner = models.ForeignKey(Owner, on_delete=models.CASCADE)
呢?如果網站是關於寵物的,而所有者只是附在寵物身上的信息。
直覺上,我傾向於將owner = models.ForeignKey(Owner, on_delete=models.CASCADE)
放在Pet對象中是正確的方法。
然後如何限制用戶自己的對象?如果寵物被重命名,它必須通過它的所有者信息過濾掉,這樣我們纔不會重命名其他寵物。
謝謝你的時間。
編輯:
class Pet(models.Model):
name = models.CharField(max_length=100)
class Owner(models.Model):
pet = models.ManyToManyField(Pet)
name = models.CharField(max_length=100)
user = models.ForeignKey(settings.AUTH_USER_MODEL)
謝謝!它突然變得更加清晰,我無法將頭部包裹起來,並考慮一些奇怪的實現。我看到有人在做這個'user = models.ForeignKey(settings.AUTH_USER_MODEL,default = 1,blank = True,related_name =「pet_user」)',這與OneToOneField行是相同還是相關的? –
這是它的推薦方式。但我認爲你會發現消化更難。在我的示例中,您只需將'import django.contrib.auth.models User'添加到您的模型文件 – e4c5
但是該空白= True,並且related_name部分可以省略(即您看到的其他解決方案中的那部分是冗餘的) – e4c5