Kaydet (Commit) 2804b8d2 authored tarafından Nasir Hussain's avatar Nasir Hussain Kaydeden (comit) Tim Graham

Fixed #30111 -- Fixed AppRegistryNotReady error with django.contrib.postgres in INSTALLED_APPS.

Regression in e192223e.
üst d02b2aa1
from django.apps.registry import Apps from django.apps.registry import Apps
from django.db import models from django.db import models
from django.db.utils import DatabaseError from django.db.utils import DatabaseError
from django.utils.decorators import classproperty
from django.utils.timezone import now from django.utils.timezone import now
from .exceptions import MigrationSchemaMissing from .exceptions import MigrationSchemaMissing
...@@ -18,19 +19,30 @@ class MigrationRecorder: ...@@ -18,19 +19,30 @@ class MigrationRecorder:
If a migration is unapplied its row is removed from the table. Having If a migration is unapplied its row is removed from the table. Having
a row in the table always means a migration is applied. a row in the table always means a migration is applied.
""" """
_migration_class = None
class Migration(models.Model):
app = models.CharField(max_length=255) @classproperty
name = models.CharField(max_length=255) def Migration(cls):
applied = models.DateTimeField(default=now) """
Lazy load to avoid AppRegistryNotReady if installed apps import
class Meta: MigrationRecorder.
apps = Apps() """
app_label = "migrations" if cls._migration_class is None:
db_table = "django_migrations" class Migration(models.Model):
app = models.CharField(max_length=255)
def __str__(self): name = models.CharField(max_length=255)
return "Migration %s for %s" % (self.name, self.app) applied = models.DateTimeField(default=now)
class Meta:
apps = Apps()
app_label = 'migrations'
db_table = 'django_migrations'
def __str__(self):
return 'Migration %s for %s' % (self.name, self.app)
cls._migration_class = Migration
return cls._migration_class
def __init__(self, connection): def __init__(self, connection):
self.connection = connection self.connection = connection
......
SECRET_KEY = 'abcdefg'
INSTALLED_APPS = [
'django.contrib.postgres',
]
import os
import subprocess
import sys
from tests.postgres_tests import PostgreSQLSimpleTestCase
class PostgresIntegrationTests(PostgreSQLSimpleTestCase):
def test_check(self):
os.chdir(os.path.dirname(__file__))
result = subprocess.run(
[sys.executable, '-m', 'django', 'check', '--settings', 'integration_settings'],
stdout=subprocess.DEVNULL,
stderr=subprocess.PIPE,
)
stderr = '\n'.join([e.decode() for e in result.stderr.splitlines()])
self.assertEqual(result.returncode, 0, msg=stderr)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment