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

Popular posts from this blog

PHP and MySQL WP -

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

go - golang pprof for c library code -