是否有可能重写Viewset的创建以首先检查对象是否存在,如果存在,则返回该对象而不是创建它?
具体来说,在我的视图集中,我重写了create函数,如下所示:
try:
item = Item.objects.get(recipe__id=self.request.data['recipe'])
except Item.DoesNotExist:
serializer.save(owner=self.request.user)
有什么想法可以将物品退还给我吗?目前,这只是吐出的输入。即使我序列化并返回了该项目,这似乎也无法正常工作:
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)
答案 0 :(得分:1)
这将返回一个查询集
class UserViewSet(viewsets.ModelViewSet):
permission_classes = [permissions.IsAuthenticated, ]
serializer_class = UserSerializer
def get_queryset(self):
return User.objects.all()
因此,仅返回1,传递一个kwarg(可能是pk),然后返回与get_queryset()
不同的内容
答案 1 :(得分:1)
它们是一个函数
b2
这将获取对象(如果存在)或创建对象(如果不存在),这将返回两个变量1st(在这种情况下为“ instance”)将是与它无关紧要的对象,它已经创建并且已经退出,您将确定获得对象,第二个变量(在此“创建的”中)将是一个布尔值,用于标识对象是已创建还是已经存在。如果创建了对象,则为True,如果已经存在,则为false。但是无论对象是创建的还是存在的,您都会在第一个变量中得到它。