我使用mixins.CreateModelMixin.create
来创建对象,但还需要将request.user
添加到其中的m2m
字段。所以我的想法是从self.create()
捕捉对象,而不是从make obj.users.add(user)
捕捉对象。但是CreateModelMixin只返回responce
。如何从.create
获取对象?添加用户是否更好?我可以使用super
(不太好)?谢谢!你知道吗
新增:
我可以在这里使用perform_create()
和catch对象,但它会使代码更大,并且大部分重复.create()
,所以我认为这不是一种正确的方法。你知道吗
新增:
代码I用户现在:
@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()
返回所创建对象的实例。source您的代码如下所示:
DRF序列化程序不支持M2M create/update开箱即用。你知道吗
编辑: 我不建议重写
create
方法。创建perform_create
方法正是为了达到这个目的。只有在调用.save()
之后才能访问实例。因此,在序列化程序上调用.save()
之后,您可以根据需要更新实例。访问实例的两种方法是: 1) 使用.save
方法返回的对象(如上所示) 2) 你可以用序列化程序.instance. (同样,您只能在调用.save
之后访问instance
。)你知道吗相关问题 更多 >
编程相关推荐