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。但是你会得到第一个变量中的对象,无论它是创建的还是存在的。