python - Django Rest Framework models post_save signal is executed after post request is completed -
i have following serializer:
class createorderserializer(orderserializer): class meta(metaorder): fields = metaorder.fields + ('pair',) read_only_fields = metaorder.read_only_fields def create(self, validated_data): withdraw_address = validated_data.pop('withdraw_address') # making sure address = address.objects.get(address=withdraw_address['address']) order = order(**validated_data) if not address: address = address(**withdraw_address) address.type = address.withdraw address.currency = order.pair.quote address.save() order.withdraw_address = address order.save() return order and following viewset:
class orderlistviewset(userresourceviewset, readonlycacheresponseandetagmixin): model_class = order lookup_field = 'unique_reference' serializer_class = orderserializer pagination_class = orderpagination def get_serializer_class(self): if self.request.method == 'post': return createorderserializer return super(orderlistviewset, self).get_serializer_class() def get_queryset(self, filters=none, **kwargs): self.queryset = order.objects.all() return super(orderlistviewset, self).get_queryset() def perform_create(self, serializer): if not self.request.user.is_authenticated: _create_anonymous_user(self.request) serializer.save(user=self.request.user) return super(orderlistviewset, self).perform_create(serializer) and following signal:
@receiver(post_save, dispatch_uid='allocate_wallets') def allocate_wallets(sender, instance=none, created=false, **kwargs): if sender.__name__ not in allowed_senders: # run on users return if not created: return order = instance user = order.user currency = order.pair.quote if user none: return if currency.disabled or not currency.is_crypto: return card, address = clients[currency.wallet].create_user_wallet(user, currency) order.deposit_address = address order.save() i suspect signal executed after response sent, since not deposit_address field post request([post] /orders) detail view ([get] /orders/:id).
what can done resolve this?
Comments
Post a Comment