是否可以覆盖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)
他们是一个功能
instance , created = Item.objects.get_or_create(parameter)
这将获得对象如果存在或创建对象,如果它不存在,这将返回两个变量第一个(在这种情况下“实例”)将是它创建并且已经退出的对象,你将得到肯定的对象和第二个变量(在此“创建”中)将是一个布尔值,以标识对象是否已创建或已存在。如果创建了对象,它将为True,如果对象已经退出,则为false。但无论是创建还是存在,您都会获得第一个变量中的对象。
这将返回一个查询集
class UserViewSet(viewsets.ModelViewSet):
permission_classes = [permissions.IsAuthenticated, ]
serializer_class = UserSerializer
def get_queryset(self):
return User.objects.all()
所以要返回1,传递一个kwarg(可能是pk)并返回与get_queryset()
不同的东西