如何检查模型是否在模型外键集中? Django,django 休息框架
how to check if a model is in a models foriegn key set? Django, django rest framework
我有一个房间模型,它与场地有多对一的关系。
一个场所可以有多个房间。
我正在尝试在我的休息框架中设置我的 http 方法,这样当我添加权限时一切正常。
所以如果说有人想从场地中删除房间,我必须确保
1 该人有权访问该场所
2 那个房间附属于那个场地
我想要场地模型
然后获取场地模型 room_set 并检查 room_set 以查看是否存在具有我要删除的模型的房间主键的房间。
我目前拥有的:
class GetEditDeleteVenueRoom(APIView):
def get(self, request, *args, **kwargs):
pass
def post(self, request, *args, **kwargs):
print('wait its over here')
def delete(self, request, *args, **kwargs):
venuepk = kwargs.get('venuepk', None)
venue = get_object_or_404(Venue, pk=venuepk)
venuerooms = venue.room_set
print(venuerooms)
return Response({})
我希望我可以只对会场房间进行交互并检查会场房间中的每个对象,但我有一种强烈的感觉它不会工作,因为 venerooms 不是 python 对象?也许是。我将在执行 for 循环后更新这个问题,或者如果我发现一切正常,我可能会删除它。
我的问题是如何设置房间并查看是否有我正在搜索的房间 pk 的房间。
正如我所料,我在尝试的代码中遇到了错误:
def delete(self, request, *args, **kwargs):
venuepk = kwargs.get('venuepk', None)
venue = get_object_or_404(Venue, pk=venuepk)
venuerooms = venue.room_set
roompk = kwargs.get('roompk')
roomobject = None
for room in venuerooms:
if room.pk == roompk:
roomobject = room
roomobject.delete()
print(venuerooms)
return Response({})
我得到的错误:
File "/home/rickus/Documents/softwareProjects/211hospitality/suitsandtables/backend/virtualsuits/suitsandtables/venues/views.py", line 125, in delete
for room in venuerooms:
TypeError: 'RelatedManager' object is not iterable
有什么想法可以做吗?
新编辑:
所以我实施了下面的答案并将 all()
添加到我的 venerooms 定义
但是现在我有一个新的错误。这个没有意义,因为我显然覆盖了 for 循环中的 None 属性。
def delete(self, request, *args, **kwargs):
venuepk = kwargs.get('venuepk', None)
venue = get_object_or_404(Venue, pk=venuepk)
venuerooms = venue.room_set.all()
roompk = kwargs.get('roompk')
roomobject = None
for room in venuerooms:
if room.pk == roompk:
print(room)
roomobject = room
roomobject.delete()
print(venuerooms)
return Response({})
错误:
File "/home/rickus/Documents/softwareProjects/211hospitality/suitsandtables/backend/virtualsuits/suitsandtables/venues/views.py", line 129, in delete
roomobject.delete()
AttributeError: 'NoneType' object has no attribute 'delete'
[14/Mar/2018 20:01:53] "DELETE /api/suitsadmin/venue/1/room/15 HTTP/1.1
添加您的模型来帮助解决问题....但这是您访问 room_set
的方式
def delete(self, request, *args, **kwargs):
venuepk = kwargs.get('venuepk', None)
venue = get_object_or_404(Venue, pk=venuepk)
roompk = kwargs.get('roompk')
room = venue.room_set.filter(pk=roompk)
room.delete()
return Response({})
所以我最终这样做了:
一旦我在 roomset 中找到房间对象,就抓取它。通过查询房间对象的数据库。虽然我对这个答案不满意。正如我想象的那样 room_set 已经可以访问房间对象了吗?我不能就这样删除它吗?如果可以的话,我会很感激比我更好的答案。不管这是我所做的。
def delete(self, request, *args, **kwargs):
venuepk = kwargs.get('venuepk', None)
venue = get_object_or_404(Venue, pk=venuepk)
venuerooms = venue.room_set.all()
roompk = kwargs.get('roompk')
roomobject = None
for room in venuerooms:
if room.pk == roompk:
roomobject = Room.objects.get(pk=roompk)
roomobject.delete()
return Response({})
return Response(status.HTTP_404_NOT_FOUND)
我有一个房间模型,它与场地有多对一的关系。
一个场所可以有多个房间。
我正在尝试在我的休息框架中设置我的 http 方法,这样当我添加权限时一切正常。
所以如果说有人想从场地中删除房间,我必须确保 1 该人有权访问该场所 2 那个房间附属于那个场地
我想要场地模型 然后获取场地模型 room_set 并检查 room_set 以查看是否存在具有我要删除的模型的房间主键的房间。
我目前拥有的:
class GetEditDeleteVenueRoom(APIView):
def get(self, request, *args, **kwargs):
pass
def post(self, request, *args, **kwargs):
print('wait its over here')
def delete(self, request, *args, **kwargs):
venuepk = kwargs.get('venuepk', None)
venue = get_object_or_404(Venue, pk=venuepk)
venuerooms = venue.room_set
print(venuerooms)
return Response({})
我希望我可以只对会场房间进行交互并检查会场房间中的每个对象,但我有一种强烈的感觉它不会工作,因为 venerooms 不是 python 对象?也许是。我将在执行 for 循环后更新这个问题,或者如果我发现一切正常,我可能会删除它。
我的问题是如何设置房间并查看是否有我正在搜索的房间 pk 的房间。
正如我所料,我在尝试的代码中遇到了错误:
def delete(self, request, *args, **kwargs):
venuepk = kwargs.get('venuepk', None)
venue = get_object_or_404(Venue, pk=venuepk)
venuerooms = venue.room_set
roompk = kwargs.get('roompk')
roomobject = None
for room in venuerooms:
if room.pk == roompk:
roomobject = room
roomobject.delete()
print(venuerooms)
return Response({})
我得到的错误:
File "/home/rickus/Documents/softwareProjects/211hospitality/suitsandtables/backend/virtualsuits/suitsandtables/venues/views.py", line 125, in delete
for room in venuerooms:
TypeError: 'RelatedManager' object is not iterable
有什么想法可以做吗?
新编辑:
所以我实施了下面的答案并将 all()
添加到我的 venerooms 定义
但是现在我有一个新的错误。这个没有意义,因为我显然覆盖了 for 循环中的 None 属性。
def delete(self, request, *args, **kwargs):
venuepk = kwargs.get('venuepk', None)
venue = get_object_or_404(Venue, pk=venuepk)
venuerooms = venue.room_set.all()
roompk = kwargs.get('roompk')
roomobject = None
for room in venuerooms:
if room.pk == roompk:
print(room)
roomobject = room
roomobject.delete()
print(venuerooms)
return Response({})
错误:
File "/home/rickus/Documents/softwareProjects/211hospitality/suitsandtables/backend/virtualsuits/suitsandtables/venues/views.py", line 129, in delete
roomobject.delete()
AttributeError: 'NoneType' object has no attribute 'delete'
[14/Mar/2018 20:01:53] "DELETE /api/suitsadmin/venue/1/room/15 HTTP/1.1
添加您的模型来帮助解决问题....但这是您访问 room_set
的方式def delete(self, request, *args, **kwargs):
venuepk = kwargs.get('venuepk', None)
venue = get_object_or_404(Venue, pk=venuepk)
roompk = kwargs.get('roompk')
room = venue.room_set.filter(pk=roompk)
room.delete()
return Response({})
所以我最终这样做了:
一旦我在 roomset 中找到房间对象,就抓取它。通过查询房间对象的数据库。虽然我对这个答案不满意。正如我想象的那样 room_set 已经可以访问房间对象了吗?我不能就这样删除它吗?如果可以的话,我会很感激比我更好的答案。不管这是我所做的。
def delete(self, request, *args, **kwargs):
venuepk = kwargs.get('venuepk', None)
venue = get_object_or_404(Venue, pk=venuepk)
venuerooms = venue.room_set.all()
roompk = kwargs.get('roompk')
roomobject = None
for room in venuerooms:
if room.pk == roompk:
roomobject = Room.objects.get(pk=roompk)
roomobject.delete()
return Response({})
return Response(status.HTTP_404_NOT_FOUND)