I have the same problem. It looks like the content types app will return the content type of the original model when asked for one since revision 10523 (see ticket #10738), but that an additional content type is still created.
Is the creation of the additional content type necessary? http://code.djangoproject.com/ticket/10738 On Wed, Nov 25, 2009 at 2:32 PM, Giovannetti, Mark < mark.giovanne...@nrcan-rncan.gc.ca> wrote: > > FYI: > > Trying to run unittests. > > Using the .only() method on a queryset causes the content types > machinery to find and attempt to use a model with Deferred attributes. > > This function (with print and verbosity added): > > def update_contenttypes(app, created_models, verbosity=2, **kwargs): > """ > Creates content types for models in the given app, removing any > model > entries that no longer have a matching model class. > """ > verbosity=2 > ContentType.objects.clear_cache() > content_types = > list(ContentType.objects.filter(app_label=app.__name__.split('.')[-2])) > app_models = get_models(app) > #print "app, app_models", app, app_models > if not app_models: > return > for klass in app_models: > opts = klass._meta > #print "klass, opts", klass, opts, opts.__dict__ > try: > ct = ContentType.objects.get(app_label=opts.app_label, > model=opts.object_name.lower()) > content_types.remove(ct) > except ContentType.DoesNotExist: > ct = ContentType(name=smart_unicode(opts.verbose_name_raw), > app_label=opts.app_label, > model=opts.object_name.lower()) > print ct.name, len(ct.name), ct.app_label, ct.model > ct.save() > if verbosity >= 2: > print "Adding content type '%s | %s'" % (ct.app_label, > ct.model) > > [...] > > while running unittests, gives this output and error. > > Adding content type 'contact | webaddress' > postal address 14 contact postaladdress > Adding content type 'contact | postaladdress' > postal address boundary 23 contact postaladdressboundary > Adding content type 'contact | postaladdressboundary' > contact mechanism link 22 contact contactmechanismlink > Adding content type 'contact | contactmechanismlink' > > === > Output of: > print ct.name, len(ct.name), ct.app_label, ct.model gives: > > contact mechanism type_ > deferred_creation_date_time_description_display_is_default_privilege_tok > en_record_deleted_record_enabled 128 contact > contactmechanismtype_deferred_creation_date_time_description_display_is_ > default_privilege_token_record_deleted_record_enabled > === > Traceback (most recent call last): > File > "C:\1mvgdocs\neodfos_workspace\neodfos\trunk\src\tools\tests\run_tests.p > y", line 245, in <module> > test_name = > connection.creation.create_test_db(verbosity=db_verbosity, > autoclobber=autoclobber) > File "C:\Python26\lib\site-packages\django\db\backends\creation.py", > line 336, in create_test_db > call_command('syncdb', verbosity=verbosity, interactive=False) > File > "C:\Python26\lib\site-packages\django\core\management\__init__.py", line > 166, in call_command > return klass.execute(*args, **defaults) > File "C:\Python26\lib\site-packages\django\core\management\base.py", > line 222, in execute > output = self.handle(*args, **options) > File "C:\Python26\lib\site-packages\django\core\management\base.py", > line 351, in handle > return self.handle_noargs(**options) > File > "C:\Python26\lib\site-packages\django\core\management\commands\syncdb.py > ", line 99, in handle_noargs > emit_post_sync_signal(created_models, verbosity, interactive) > File "C:\Python26\lib\site-packages\django\core\management\sql.py", > line 205, in emit_post_sync_signal > interactive=interactive) > File "C:\Python26\lib\site-packages\django\dispatch\dispatcher.py", > line 166, in send > response = receiver(signal=self, sender=sender, **named) > File > "C:\Python26\lib\site-packages\django\contrib\contenttypes\management.py > ", line 28, in update_contenttypes > ct.save() > File "C:\Python26\lib\site-packages\django\db\models\base.py", line > 410, in save > self.save_base(force_insert=force_insert, force_update=force_update) > File "C:\Python26\lib\site-packages\django\db\models\base.py", line > 495, in save_base > result = manager._insert(values, return_id=update_pk) > File "C:\Python26\lib\site-packages\django\db\models\manager.py", line > 177, in _insert > return insert_query(self.model, values, **kwargs) > File "C:\Python26\lib\site-packages\django\db\models\query.py", line > 1087, in insert_query > return query.execute_sql(return_id) > File > "C:\Python26\lib\site-packages\django\db\models\sql\subqueries.py", line > 320, in execute_sql > cursor = super(InsertQuery, self).execute_sql(None) > File "C:\Python26\lib\site-packages\django\db\models\sql\query.py", > line 2369, in execute_sql > cursor.execute(sql, params) > File "C:\Python26\lib\site-packages\django\db\backends\util.py", line > 19, in execute > return self.cursor.execute(sql, params) > psycopg2.DataError: value too long for type character varying(100) > > > The error can be eliminated if the .only() method is not used: > > #for subtype in type_entity.objects.all().only('slug'): > for subtype in type_entity.objects.all(): > > > The tests complete without error when changing the above line to not use > .only(). > > Other output from the various print statements in update_contenttypes > (note the last model listed): > > app, app_models > <module 'os_so.contact.models' from > 'C:\...\trunk\src\os_so\contact\models.pyc'> > [ > <class 'os_so.contact.models.ContactMechanismType'>, > <class 'os_so.contact.models.ContactMechanism'>, > <class 'os_so.contact.models.OrganizationContactPhoneNumber'>, > <class 'os_so.contact.models.FaxNumber'>, > <class 'os_so.contact.models.MobilePhone'>, > <class 'os_so.contact.models.HomePhone'>, > <class 'os_so.contact.models.OfficePhone'>, > <class 'os_so.contact.models.EmailAddress'>, > <class 'os_so.contact.models.FTPAddress'>, > <class 'os_so.contact.models.WebAddress'>, > <class 'os_so.contact.models.PostalAddress'>, > <class 'os_so.contact.models.PostalAddressBoundary'>, > <class 'os_so.contact.models.ContactMechanismLink'>, > <class 'os_so.contact.models.ContactMechanismPurposeType'>, > <class > 'os_so.contact.models.ContactMechanismType_Deferred_creation_date_time_d > escription_display_is_default_privilege_token_record_deleted_record_enab > led'>] > > This model is created in the db.models.query_utils machinery > in deferred_class_factory. > > > > > -- > > You received this message because you are subscribed to the Google Groups > "Django users" group. > To post to this group, send email to django-us...@googlegroups.com. > To unsubscribe from this group, send email to > django-users+unsubscr...@googlegroups.com<django-users%2bunsubscr...@googlegroups.com> > . > For more options, visit this group at > http://groups.google.com/group/django-users?hl=en. > > > -- ======================= Andrew D. Ball 勃安 "Ὁ θεὸς ἀγάπη ἐστίν ..." (1 Jn 4:16) -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-us...@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.