Django Rest框架模型post_save信号在post请求完成后执行

2024-06-17 15:41:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下序列化程序:

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

以及以下视图集:

^{pr2}$

以及以下信号:

@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请求([POST]/orders)获得deposit_address字段,但我确实从detail视图([get]/orders/:id)中获取它。在

如何解决这个问题?在


Tags: fieldsdatareturnifaddresssavenotorder