creates the default site object the default settings set siteid 1 and some tests in django s test suite rely on this value however if database sequences are reused e g in the test suite after flushsyncdb it isn t guaranteed that the next id will be 1 so we coerce it see 15573 and 16353 this can also crop up outside of tests see 15346 we set an explicit pk instead of relying on autoincrementation so we need to reset the database sequence see 17415 the default settings set site_id 1 and some tests in django s test suite rely on this value however if database sequences are reused e g in the test suite after flush syncdb it isn t guaranteed that the next id will be 1 so we coerce it see 15573 and 16353 this can also crop up outside of tests see 15346 we set an explicit pk instead of relying on auto incrementation so we need to reset the database sequence see 17415
from django.apps import apps as global_apps
from django.conf import settings
from django.core.management.color import no_style
from django.db import DEFAULT_DB_ALIAS, connections, router


def create_default_site(
    app_config,
    verbosity=2,
    interactive=True,
    using=DEFAULT_DB_ALIAS,
    apps=global_apps,
    **kwargs,
):
    try:
        Site = apps.get_model("sites", "Site")
    except LookupError:
        return

    if not router.allow_migrate_model(using, Site):
        return

    if not Site.objects.using(using).exists():
        
        
        
        
        
        if verbosity >= 2:
            print("Creating example.com Site object")
        Site(
            pk=getattr(settings, "SITE_ID", 1), domain="example.com", name="example.com"
        ).save(using=using)

        
        
        sequence_sql = connections[using].ops.sequence_reset_sql(no_style(), [Site])
        if sequence_sql:
            if verbosity >= 2:
                print("Resetting sequence")
            with connections[using].cursor() as cursor:
                for command in sequence_sql:
                    cursor.execute(command)