gpt4 book ai didi

django - 无效的 pk(模型对象)不存在 - Django REST Framework

转载 作者:行者123 更新时间:2023-12-02 00:09:49 25 4
gpt4 key购买 nike

我想创建商家并添加银行账户详细信息。

这些是我的序列化器:

class MerchantSerializer(core_serializers.BaseModelSerializer):
"""
MerchantSerializer
"""
bank_account_details = serializers.JSONField()
merchant_entity_id = serializers.UUIDField()

class Meta:
model = paylater_models.Merchant
fields = ('merchant_entity_id', 'bank_account_details',)

def create(self, validated_data):
"""
create
:param validated_data:
:return:
"""

# with transaction.atomic():
# Normalizing and separating information
bank_account_data = validated_data.pop('bank_account_details')
validated_data.update({'merchant_number': core_utils.generate_alphanumeric_strings()})

# Creating merchant instance
instance = super(MerchantSerializer, self).create(validated_data)

# Creating bank account details for the newly created merchant
bank_account_data.update({'merchant': instance})
bank_account_serializer = BankAccountDetailSerializer(data=bank_account_data)
bank_account_serializer.is_valid(raise_exception=True)
bank_account_serializer.save()

return instance


class BankAccountDetailSerializer(core_serializers.BaseModelSerializer):
"""
BankAccountDetailSerializer
"""

bank_name = serializers.CharField(max_length=256)
account_number = serializers.CharField(max_length=18)
ifsc = serializers.CharField(max_length=11)

class Meta:
model = paylater_models.BankAccountDetail
fields = ('bank_name', 'account_number', 'ifsc', 'merchant',)

def validate_account_number(self, account_number):
"""
validate_account_number
:param bank_name:
:return:
"""

if re.search('[0-9]{9,18}', str(account_number)) is not None:
return account_number

raise paylater_exceptions.InvalidBankAccountNumberError()

def validate_ifsc(self, ifsc):
"""
validate_ifsc
:param ifsc:
:return:
"""

if re.search('[A-Za-z]{4}[a-zA-Z0-9]{7}', ifsc) is not None:
return ifsc

raise paylater_exceptions.InvalidIFSCError()

它给了我一个无效的 pk \"Merchant object (f7f3f77a-7f18-4a27-ac39-1f182d233006)\" - 对象不存在。

我在这里做错了什么?

我知道问题出在我传递给 BankAccountDetailSerializer 的商户实例上,但我真的不知道它是什么以及如何解决这个问题。

最佳答案

解决方案非常简单,您只需使用 merchant.pk 而不是 merchant 对象。试试这个:

bank_account_data.update({'merchant': instance.pk})

用上面的行替换商户序列化器创建函数中的当前行。它应该可以工作。

请记住,当您想向模型序列化程序提供相关对象时,它应该是主键。除非您使用嵌套序列化程序。

关于django - 无效的 pk(模型对象)不存在 - Django REST Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59434529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com