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!