最簡單的方法是編輯模型,使其具有owner
或user
字段,該字段對創建者是ForeignKey
。
class Locations(models.Model):
owner = ForeignKey(User)
...
而在你的觀點:
def edit_location(request, location_id):
location = Locations.objects.get(pk=location_id)
if request.user is not location.owner:
# return a 401 or redirect to somewhere
else:
# do stuff
您可以使用Django的ManyToManyField
選項,如果每個Location
和User
可以有多個關係。例如:
class Locations(models.Model):
owners = models.ManyToManyField(User)
user = User.objects.create(username='Ian')
location = Locations.objects.create(...)
location.owners.add(user)
然後是User
/Locations
上都可用:
>>> location.owners.all()
[<User: Ian>]
>>> user.locations_set.all()
[<Locations: ...>]
上User
該集將被自動創建,它將被命名爲<Model Name>_set
。
然後,您可以使用in
運營商檢查所有權:
def edit_location(request, location_id):
location = Locations.objects.get(pk=location_id)
if request.user in location.owners.all():
# return a 401 or redirect to somewhere
else:
# do stuff
如果用戶只能編輯自己的對象,IanAuld的答案是要走的路。否則,您可能有一組可以編輯所有對象的用戶,您可以通過將這些用戶放在一個組中來控制這一點。 – henrikstroem