如何修改数据库中现有行的serializer.is_valid()方法以使其通过验证

问题描述 投票:0回答:1

我正在尝试使用

serializer.save()
插入对象列表,但是当我尝试插入现有数据时,它会抛出错误并且未通过验证,如何修改
is_valid()
方法,或者有什么方法可以跳过现有对象并将其他对象插入到方法中

节省:

data = sanitizer.to_dict()
serializer = serializer_class(data=data, many=True)
if serializer.is_valid(raise_exception=True):
   serializer.save()

序列化器:

from apps.trades.models import Trade
from rest_framework import serializers


class TradeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Trade
        fields = ['identifier', 'issue_date', 'maturity_date', 
                  'invested_amount', 'interest_rate']

验证错误:

[{"identifier":["使用此标识符的交易已存在。"]}

python django django-rest-framework django-serializer
1个回答
0
投票

重写序列化器的验证方法以检查

identifier
是否存在

from apps.trades.models import Trade
from rest_framework import serializers

class TradeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Trade
        fields = ['identifier', 'issue_date', 'maturity_date', 
                  'invested_amount', 'interest_rate']

    def validate(self, data):
        # Get the list of identifiers from the data
        identifiers = [item['identifier'] for item in data]

        # Check for existing trades with these identifiers
        existing_identifiers = Trade.objects.filter(identifier__in=identifiers).values_list('identifier', flat=True)

        # If any of the identifiers already exist, remove them from the data
        if existing_identifiers:
            data = [item for item in data if item['identifier'] not in existing_identifiers]

        return data
© www.soinside.com 2019 - 2024. All rights reserved.