3

I have created a custom User model

class User(AbstractUser):
    phone_no = models.CharField(blank=True, null=True, max_length=20, default="")

    class Meta:
        db_table = 'auth_user'

When I am accessing an object of User, auth_group and auth_permission get selected automatically.

from django import db
from example.models import User
import simplejson as json

In : print json.dumps(db.connection.queries)
Out: []

In : user = User.objects.get(id=1)

In : print json.dumps(db.connection.queries)
Out: 
[
    {
        "time": "0.001",
        "sql": "SELECT `auth_user`.`id`, `auth_user`.`password`, `auth_user`.`last_login`, `auth_user`.`is_superuser`, `auth_user`.`username`, `auth_user`.`first_name`, `auth_user`.`last_name`, `auth_user`.`email`, `auth_user`.`is_staff`, `auth_user`.`is_active`, `auth_user`.`date_joined`, `auth_user`.`phone_no` FROM `auth_user` WHERE `auth_user`.`id` = 1 "
    },
    {
        "time": "0.000",
        "sql": "SELECT `auth_group`.`id` FROM `auth_group` INNER JOIN `auth_user_groups` ON ( `auth_group`.`id` = `auth_user_groups`.`group_id` ) WHERE `auth_user_groups`.`user_id` = 1 "
    },
    {
        "time": "0.001",
        "sql": "SELECT `auth_permission`.`id` FROM `auth_permission` INNER JOIN `auth_user_user_permissions` ON ( `auth_permission`.`id` = `auth_user_user_permissions`.`permission_id` ) INNER JOIN `django_content_type` ON ( `auth_permission`.`content_type_id` = `django_content_type`.`id` ) WHERE `auth_user_user_permissions`.`user_id` = 1ORDER BY `django_content_type`.`app_label` ASC, `django_content_type`.`model` ASC, `auth_permission`.`codename` ASC"
    }
]

How do I stop this behavior because when I use select_related where User is foreign key and iterate over the result for user.first_name there it becomes costly. BTW I do not use auth_group and auth_permission so I don't mind droping it

Sar009
  • 2,166
  • 5
  • 29
  • 48

0 Answers0