我正在尝试使用
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":["使用此标识符的交易已存在。"]}
重写序列化器的验证方法以检查
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