Hi there!

I have User model and serializer class which represents it.

*class User(models.Model):*
*    username = models.CharField(unique=True, max_length=50)*
*    is_admin = models.BooleanField(default=False)*

*class CreateUserSerializer(serializers.ModelSerializer):*
*     class Meta:*
*        model = User*
*        fields = ("username", "is_admin")*

*    def create(self, validated_data: Dict[str, Any]) -> User:*
*        username = validated_data["username"]*

*        try:*
*            user_object = User.objects.create(username=username)*
*        except IntegrityError:*
*            raise UserAlreadyRegistered()*

*        return user_object*

My database holds lots of users(appr. 10 million). When I create another 
user, Django Rest Framework look at the model fields and check that if 
there are any unique=True fields.
If there are, then it assigns "UniqueValidator". This validator calls 
"filter_queryset" which means it query the database and check that 
are there any given username record. If there are not, then it creates the 
user.

My question is, why DRF make a query before create operation? Since 
database(PostgreSQL) holds the field attributes, it knows that 
username field is unique, and it can throw an exception if I try to create 
user with the same username field. The reason I'm asking it, my application 
gets a lot of create operation, and each create operation I have to query 
my database, which is I think more costly than create it wihout making a 
filter query. 
Do I missing something in this operation?

Thanks!

-- 
You received this message because you are subscribed to the Google Groups 
"Django REST framework" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-rest-framework+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-rest-framework/7d2b7aa3-2be3-4b21-9032-c1438e22754an%40googlegroups.com.

Reply via email to