我有以下序列化程序:
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')
# Just 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
以下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)
以及以下信号:
@receiver(post_save, dispatch_uid='allocate_wallets')
def allocate_wallets(sender, instance=None, created=False, **kwargs):
if sender.__name__ not in ALLOWED_SENDERS:
# Only run on users
return
if not created:
return
order = instance
user = order.user
currency = order.pair.quote
if user is 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()
我怀疑信号是在响应已经发送后执行的,因为我没有从POST请求中获取deposit_address
字段([POST] / orders),但是我从详细视图中得到它( [GET] / orders /:id)。
可以采取哪些措施来解决这个问题?