DRF 视图是否使用其查询集的对象管理器?

Do DRF views use its queryset's object manager?

如果我有一个带有自定义 create 模型函数的自定义对象管理器:

class CustomManager(models.Manager):
  def get_queryset(self):
    return super().get_queryset().filter(custom=True)
  def create(self):
    kwargs["custom"] = True
    return super().create(**kwargs)

class Item(models.Model):
   customs = CustomManager()
   custom = BooleanField()
   ...

然后我使用该自定义管理器作为视图的查询集:

class ItemViewSet(views.ModelViewSet):
   queryset = Item.customs.all()

ItemViewSet 的 create/post 函数会自动应用我的自定义对象管理器的 kwargs["custom"] = True 吗?

ModelViewSets 上的创建由 serializer_class 处理,正如在 CreateModelMixin 上看到的那样,更新也一样 - 调用 serializer.save()。 假设您使用的是简单的 ModelSerializer,这就是在创建对象的 serializer.save() 上调用的内容:

instance = ModelClass._default_manager.create(**validated_data)

因此它将使用您模型的 _default_manageraccording to the docs 将是在 class 上声明的第一个管理器 - 因此理论上它应该是您的自定义管理器.

顺便说一句,我强烈建议您在遇到此类情况时仔细阅读 DRF 的代码。该代码非常简单易懂。像 Classy Django REST Framework 这样的网站可以让浏览代码变得更加容易。