【发布时间】:2020-04-13 12:21:46
【问题描述】:
我希望创建一个商家并添加银行帐户详细信息。
这些是我的序列化程序:
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 的商家实例上,但我真的不知道它是什么以及如何解决这个问题。
【问题讨论】:
-
确保您正在请求获取不存在的对象。确认您正在使用的密钥和对应的对象确实存在于数据库中。
-
另外,如果您分享一种重现问题的方法,将会有所帮助。谢谢
-
嘿@luistm。复制问题的一种方法是使用数据调用序列化程序` { "merchant_entity_id": "0e91bec0-497f-4878-8a3f-ac97383208ff", "bank_account_details": { "bank_name": "HDFC", "account_number": " 123456789", "ifsc": "HDFC0000123" } } ` 是的,该对象存在于正在访问的数据库中
-
您好,抱歉,我无法帮助您。您应该提供复制问题所需的最少代码。我什至看不到 BankAccountDetail,也没有任何数据可以填充它。谢谢
标签: django python-3.x django-rest-framework