DRF 视图集 - 如果对象已存在,则不创建但 return
DRF Viewset - Do not create but return if object already exists
是否可以覆盖视图集的创建以首先检查对象是否存在,如果存在,则 return 该对象而不是创建它?
具体来说,在我的视图集中,我重写了创建函数,如下所示:
try:
item = Item.objects.get(recipe__id=self.request.data['recipe'])
except Item.DoesNotExist:
serializer.save(owner=self.request.user)
有什么办法可以将物品退回吗?目前这只是吐回输入。即使我序列化并 return 该项目,这似乎也不起作用,如下所示:
try:
item = Item.objects.get(
recipe__id=self.request.data['recipe'])
serializer = UserItemSerializer(item)
return Response(serializer.data, status=status.HTTP_201_CREATED)
except Item.DoesNotExist:
serializer.save(owner=self.request.user)
这将return一个查询集
class UserViewSet(viewsets.ModelViewSet):
permission_classes = [permissions.IsAuthenticated, ]
serializer_class = UserSerializer
def get_queryset(self):
return User.objects.all()
所以 return 只是 1,传递一个 kwarg(可能是 pk)和 return 不同于 get_queryset()
的东西
他们是一个函数
instance , created = Item.objects.get_or_create(parameter)
这将获取对象(如果存在)或创建对象(如果不存在),这将 return 两个变量第一个(在本例中 "instance " )将是它所做的对象不管它创建和已经退出,你肯定会得到对象,第二个变量(在这个 "created " 中)将是一个布尔值,以确定对象是创建的还是已经存在的。如果对象已创建则为 True,如果对象已经存在则为 false。但是你会得到第一个变量中的对象,无论它是创建的还是存在的。
是否可以覆盖视图集的创建以首先检查对象是否存在,如果存在,则 return 该对象而不是创建它?
具体来说,在我的视图集中,我重写了创建函数,如下所示:
try:
item = Item.objects.get(recipe__id=self.request.data['recipe'])
except Item.DoesNotExist:
serializer.save(owner=self.request.user)
有什么办法可以将物品退回吗?目前这只是吐回输入。即使我序列化并 return 该项目,这似乎也不起作用,如下所示:
try:
item = Item.objects.get(
recipe__id=self.request.data['recipe'])
serializer = UserItemSerializer(item)
return Response(serializer.data, status=status.HTTP_201_CREATED)
except Item.DoesNotExist:
serializer.save(owner=self.request.user)
这将return一个查询集
class UserViewSet(viewsets.ModelViewSet):
permission_classes = [permissions.IsAuthenticated, ]
serializer_class = UserSerializer
def get_queryset(self):
return User.objects.all()
所以 return 只是 1,传递一个 kwarg(可能是 pk)和 return 不同于 get_queryset()
他们是一个函数
instance , created = Item.objects.get_or_create(parameter)
这将获取对象(如果存在)或创建对象(如果不存在),这将 return 两个变量第一个(在本例中 "instance " )将是它所做的对象不管它创建和已经退出,你肯定会得到对象,第二个变量(在这个 "created " 中)将是一个布尔值,以确定对象是创建的还是已经存在的。如果对象已创建则为 True,如果对象已经存在则为 false。但是你会得到第一个变量中的对象,无论它是创建的还是存在的。