【发布时间】:2018-03-14 19:51:19
【问题描述】:
我有一个与场地具有多对一关系的房间模型。
一个场地可以有很多房间。
我正在尝试在我的 rest 框架中设置我的 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({})
我希望我可以交互场地房间并检查场地房间中的每个对象,但我有一种强烈的感觉,因为场地房间不是 python 对象,所以它不会工作?也许是的。我将在执行 for 循环后更新这个问题,或者如果我发现一切正常,我可能会删除它。
我的问题是如何设置房间并检查是否包含我正在搜索的 roompk 的房间。
正如我所料,我尝试的代码出错了:
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() 添加到我的场地房间定义中
但现在我有一个新错误。这个没有意义,因为我显然在 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 对象,但您应该访问 room_set.all() (可迭代)
-
@Walucas 嘿,谢谢它确实有帮助,我刚刚实现了它,但看起来我仍然有问题我现在正在编辑我的问题以解决它。
标签: django django-rest-framework django-related-manager