Django update_or_create вызывает IntegrityError внутри сериализатора
У меня есть следующая модель ModelSerializer
с методом create
. В этом методе я вызываю метод модели update_or_create
. Но когда я это делаю, валидация сериализатора выдает ошибку
rest_framework.exceptions.ValidationError: [{'non_field_errors': [ErrorDetail(string='The fields user_id, capacity_id must make a unique set.', code='unique')]}, {}]
.
Я думал, что поскольку я использую update_or_create
, он найдет строку, которая соответствует проверенным данным user_id
и capacity_id
, а затем обновит эту строку. Но проверка выполняется перед созданием, и данные не являются действительными из-за ограничения уникальности. Как же мне проигнорировать это ограничение?
class ActivatedCapacitySerializer(serializers.ModelSerializer):
user_id = serializers.IntegerField(required=False)
capacity_id = serializers.IntegerField(required=False)
class Meta:
model = ActivatedCapacity
fields = ('user_id', 'capacity_id', 'active')
def create(self, validated_data):
activated_capacity = ActivatedCapacity.objects.update_or_create(
user_id=validated_data['user_id'],
capacity_id=validated_data['capacity_id'],
defaults = {
'active': validated_data['active']
}
)
return activated_capacity
Models.py
class ActivatedCapacity(models.Model):
user_id = models.IntegerField()
capacity_id = models.IntegerField()
active = models.BooleanField(default=False)
class Meta:
unique_together = ('user_id', 'capacity_id',)
Мне просто нужно было включить в сериализатор class Meta
пустой список валидаторов, чтобы он переопределил валидаторы модели по умолчанию.
class ActivatedCapacitySerializer(serializers.ModelSerializer):
user_id = serializers.IntegerField(required=False)
capacity_id = serializers.IntegerField(required=False)
class Meta:
model = ActivatedCapacity
fields = ('user_id', 'capacity_id', 'active')
validators = []
...