22import django
33django .setup ()
44
5+ from django .apps import apps
56from django .core .management .base import BaseCommand #, CommandError
67from django .core .exceptions import FieldError
78from django .db import models
@@ -13,11 +14,14 @@ class Command(BaseCommand):
1314 help = "Check all models for referential integrity."
1415
1516 def handle (self , * args , ** options ):
16- verbosity = options .get ("verbosity" , "1" )
17- verbosity = int (verbosity ) if verbosity .isdigit () else 1
17+ verbosity = options .get ("verbosity" , 1 )
1818
1919 def check_field (field ):
20- foreign_model = field .related .parent_model
20+ try :
21+ foreign_model = field .related_model
22+ except Exception :
23+ debug .pprint ('dir(field)' )
24+ raise
2125 if verbosity > 1 :
2226 print " %s -> %s.%s" % (field .name ,foreign_model .__module__ ,foreign_model .__name__ ),
2327 used = set (field .model .objects .values_list (field .name ,flat = True ))
@@ -33,11 +37,15 @@ def check_field(field):
3337 print "%s.%s.%s -> %s.%s Bad key values:" % (model .__module__ ,model .__name__ ,field .name ,foreign_model .__module__ ,foreign_model .__name__ ),list (used - exists )
3438
3539 def check_reverse_field (field ):
36- foreign_model = field .related .parent_model
40+ try :
41+ foreign_model = field .related_model
42+ except Exception :
43+ debug .pprint ('dir(field)' )
44+ raise
3745 if foreign_model == field .model :
3846 return
39- foreign_field_name = field .related . var_name
40- foreign_accessor_name = field .related .get_accessor_name ()
47+ foreign_field_name = field .rel . name
48+ foreign_accessor_name = field .rel .get_accessor_name ()
4149 if verbosity > 1 :
4250 print " %s <- %s -> %s.%s" % (field .model .__name__ , field .rel .through ._meta .db_table , foreign_model .__module__ , foreign_model .__name__ ),
4351 try :
@@ -58,10 +66,10 @@ def check_reverse_field(field):
5866 if used - exists :
5967 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 )
6068
61- for app in [a for a in models . get_apps () if a . __name__ .startswith ('ietf.' )]:
69+ for conf in [ c for c in apps . get_app_configs () if c . name .startswith ('ietf.' )]:
6270 if verbosity > 1 :
63- print "Checking" ,app . __name__
64- for model in models .get_models (app ):
71+ print "Checking" , conf . name
72+ for model in conf .get_models ():
6573 if model ._meta .proxy :
6674 continue
6775 if verbosity > 1 :
0 commit comments