Tweaked the output of the check_referential_integrity script to specify the through table name for m2m relationships.
- Legacy-Id: 10838
This commit is contained in:
parent
71fee2ae08
commit
b19aae788e
|
@ -7,6 +7,8 @@ from django.core.exceptions import FieldError
|
|||
from django.db import models
|
||||
from django.db.models.fields.related import ForeignKey, OneToOneField
|
||||
|
||||
import debug # pyflakes:ignore
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "Check all models for referential integrity."
|
||||
|
||||
|
@ -17,18 +19,18 @@ class Command(BaseCommand):
|
|||
def check_field(field):
|
||||
foreign_model = field.related.parent_model
|
||||
if verbosity > 1:
|
||||
print " %s -> %s.%s"%(field.name,foreign_model.__module__,foreign_model.__name__),
|
||||
print " %s -> %s.%s" % (field.name,foreign_model.__module__,foreign_model.__name__),
|
||||
used = set(field.model.objects.values_list(field.name,flat=True))
|
||||
used.discard(None)
|
||||
exists = set(foreign_model.objects.values_list('pk',flat=True))
|
||||
if verbosity > 1:
|
||||
if used - exists:
|
||||
print ' ** Bad key values:',list(used - exists)
|
||||
print " ** Bad key values:",list(used - exists)
|
||||
else:
|
||||
print 'ok'
|
||||
print " ok"
|
||||
else:
|
||||
if used - exists:
|
||||
print '%s.%s.%s->%s.%s Bad key values:'%(model.__module__,model.__name__,field.name,foreign_model.__module__,foreign_model.__name__),list(used - exists)
|
||||
print "%s.%s.%s -> %s.%s Bad key values:" % (model.__module__,model.__name__,field.name,foreign_model.__module__,foreign_model.__name__),list(used - exists)
|
||||
|
||||
def check_reverse_field(field):
|
||||
foreign_model = field.related.parent_model
|
||||
|
@ -37,7 +39,7 @@ class Command(BaseCommand):
|
|||
foreign_field_name = field.related.var_name
|
||||
foreign_accessor_name = field.related.get_accessor_name()
|
||||
if verbosity > 1:
|
||||
print " %s.%s.%s -> %s"%(foreign_model.__module__, foreign_model.__name__, foreign_field_name, field.model.__name__),
|
||||
print " %s <- %s -> %s.%s" % (field.model.__name__, field.rel.through._meta.db_table, foreign_model.__module__, foreign_model.__name__),
|
||||
try:
|
||||
used = set(foreign_model.objects.values_list(foreign_field_name, flat=True))
|
||||
except FieldError:
|
||||
|
@ -49,12 +51,12 @@ class Command(BaseCommand):
|
|||
exists = set(field.model.objects.values_list('pk',flat=True))
|
||||
if verbosity > 1:
|
||||
if used - exists:
|
||||
print ' ** Bad key values:\n ',list(used - exists)
|
||||
print " ** Bad key values:\n ",list(used - exists)
|
||||
else:
|
||||
print ' ok'
|
||||
print " ok"
|
||||
else:
|
||||
if used - exists:
|
||||
print " %s.%s.%s -> %s.%s ** Bad key values:\n "%(foreign_model.__module__, foreign_model.__name__, foreign_field_name, field.model.__module__, field.model.__name__), list(used - exists)
|
||||
print "%s.%s <- %s -> %s.%s ** Bad key values:\n " % (field.model.__module__, field.model.__name__, field.rel.through._meta.db_table, foreign_model.__module__, foreign_model.__name__), list(used - exists)
|
||||
|
||||
for app in [a for a in models.get_apps() if a.__name__.startswith('ietf.')]:
|
||||
if verbosity > 1:
|
||||
|
@ -63,7 +65,7 @@ class Command(BaseCommand):
|
|||
if model._meta.proxy:
|
||||
continue
|
||||
if verbosity > 1:
|
||||
print " %s.%s"%(model.__module__,model.__name__)
|
||||
print " %s.%s" % (model.__module__,model.__name__)
|
||||
for field in [f for f in model._meta.fields if isinstance(f, (ForeignKey, OneToOneField)) ]:
|
||||
check_field(field)
|
||||
for field in [f for f in model._meta.many_to_many ]:
|
||||
|
|
Loading…
Reference in a new issue