Я хочу вставить только новые данные в свою базу данных. В случае, если данные с тем же первичным ключом уже находятся в базе данных, я хочу игнорировать их и не вызывать исключения. Тем не менее, функция создания по умолчанию ModelSerializer, кажется, вызывает и исключение, если значение уже существует в таблице. Итак, я пытаюсь решить эту проблему, переопределив функцию create () ModelSerializer.
Вот мой код:
serializers.py
class UsrPlaceMapSerializer(serializers.ModelSerializer):
class Meta:
model = UsrPlaceMap
fields = '__all__'
def create(self, validated_data):
place_id = validated_data.get("ggl_plc_id")
place_map = UsrPlaceMap.objects.filter(ggl_plc_id=place_id)
print("USRMAP INIT")
if place_map is not None:
print("USRMAP NOT NONE")
return place_map
place_map = UsrPlaceMap.objects.create(ggl_plc_id=place_id, state=validated_data.get("state"),
cty_nm=validated_data.get("cty_nm"), cntry=validated_data.get("cntry"))
print("USRMAP CREATED")
return place_map
models.py
class UsrPlaceMap(models.Model):
cty_nm = models.CharField(max_length=500)
state = models.CharField(max_length=200, blank=True, null=True)
cntry = models.CharField(max_length=500)
ggl_plc_id = models.CharField(primary_key=True, max_length=500)
class Meta:
managed = False
db_table = 'usr_place_map'
, и я вызываю метод сохранения экземпляра seralizer с помощьюthis:
instance = UsrPlaceMapSerializer(data=data, many=True)
if instance.is_valid():
instance.save()
Значения сохраняются, если я отправляю новые значения. Тем не менее, я получаю сообщение об ошибке, если я пытаюсь отправить значения уже в таблице:
{
"ggl_plc_id": [
"usr place map with this ggl plc id already exists."
]
}
}
Операторы печати в переопределенном методе create () также ничего не печатают. Итак, я предполагаю, что переопределенный метод вообще не работает. Что я делаю не так или как можно решить эту проблему? Спасибо.