Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork7k
Open
Description
Checklist
3.15 added support for unique constraint validators in serializers:#7438
This unfortunately breaks when it comes to list serializers. It could make sense these not to run for list serializers if it's difficult to do so in an efficient manner without an O(N) query, and document that fact.
Reproducible Example
fromdjango.dbimportmodelsfromdjango.db.modelsimportUniqueConstraint,Qfromrest_frameworkimportserializersclassPet(models.Model):name=models.CharField(max_length=100)animal_type=models.CharField(max_length=100)can_fly=models.BooleanField(null=True)classMeta:constraints= [UniqueConstraint(fields=["name","animal_type"],name="unique_pet", ) ]classPetSerializer(serializers.ModelSerializer):classMeta:model=Petfields= ('name','animal_type','can_fly')classPetListSerializer(serializers.ListSerializer):child=PetSerializer()defcreate(self,validated_data):pets= [Pet(**item)foriteminvalidated_data]returnPet.objects.bulk_create(pets)instances=Pet.objects.all()new_data= [ {"name":"Polly","animal_type":"Parrot","can_fly":True}, {"name":"Penguin","animal_type":"Bird","can_fly":False},]serializer=PetListSerializer(instances,data=new_data,many=True)ifserializer.is_valid(raise_exception=True):serializer.save()# This will create all pets in a single query
Running this will yield
AttributeError: 'BaseQuerySet' object has no attribute 'pk'Metadata
Metadata
Assignees
Labels
No labels