我mixins.CreateModelMixin.create
用来创建对象,但我也需要添加request.user
到其中的m2m
字段。所以我的想法是从而self.create()
不是 fially捕捉对象make obj.users.add(user)
。但是 CreateModelMixin 只返回responce
. 如何从 中获取对象.create
?添加用户是更好的方法吗?我可以使用super
(不擅长)吗?谢谢!
添加:
我可以perform_create()
在这里使用和捕获对象,但它会使代码更大并且.create()
大部分重复,所以我认为这不是正确的方法。
添加:
我现在使用的代码:
@action(detail=False, methods=['POST'], serializer_class=CompanyAdminSerializer)
def create_company(self, request):
user = self.request.user
if user.user_of_company.exists():
raise NotAcceptable(detail='Only one company allowed')
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
company = serializer.save()
company.users.add(user)
company.admin_users.add(user)
return Response(serializer.data)
要从create
您那里捕获实例,必须覆盖该create
方法。最简单的方法是覆盖该perform_create
方法。
.save()
返回创建对象的实例。来源
您的代码将如下所示:
#Assuming you're using CreateAPIView
class New_Create(CreateAPIView):
def perform_create(self, serializer):
obj = serializer.save()
#Adding to M2M
obj.users.add(self.request.user)
DRF 序列化程序不支持开箱即用的M2M 创建/更新。
编辑:我不建议覆盖该create
方法。perform_create
创建该方法正是为了达到此目的。只有在.save()
被调用后才能访问该实例。因此,在调用.save()
序列化程序后,您可以根据需要更新实例。访问实例的两种方法是:1) 使用.save
方法返回的对象(如上所示) 2) 可以使用serializer.instance。(同样,您只能访问instance
after.save
已被调用。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句