1

是否可以覆盖 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)
4

2 回答 2

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()

于 2019-04-21T07:42:52.760 回答
1

它们是一个函数

instance , created = Item.objects.get_or_create(parameter)

如果存在,这将获取对象,如果不存在则创建对象,这将返回两个变量第一个(在本例中为“实例”)将是它创建并已经退出的对象,你会得到对象肯定和第二个变量(在这个“创建”中)将是一个布尔值,以确定对象是否已创建或已经存在。如果对象已创建,则为 True,如果对象已退出,则为 false。但是您将在第一个变量中获得对象,无论它是创建还是存在。

于 2019-04-21T13:24:13.747 回答