Je suis en train de tester une mise à niveau de NonRel pour App Engine à 1.4 à partir de 1.3. Il fonctionne très bien au niveau local, mais quand je déploie à App Engine, je reçois une erreur de syncdb à la fin du déploiement:Pourquoi ai-je une exception MultiQuery sur 1.4 nonrel?
Running syncdb.
2013-08-02 09:31:34,600 WARNING simple_search_stub.py:998 Could not read search indexes from /var/folders/fv/cdp4hprx5pbc_3bf5g0wbbkw0000gn/T/dev_appserver.searchindexes
Creating tables ...
The following content types are stale and need to be deleted:
auth | message
Any objects related to these content types by a foreign key will also
be deleted. Are you sure you want to delete these content types?
If you're unsure, answer 'no'.
Type 'yes' to continue, or 'no' to cancel: yes
Traceback (most recent call last):
File "manage.py", line 9, in <module>
execute_from_command_line(sys.argv)
File "/src/django/core/management/__init__.py", line 443, in execute_from_command_line
utility.execute()
File "/src/django/core/management/__init__.py", line 382, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/src/djangoappengine/management/commands/deploy.py", line 72, in run_from_argv
run_appcfg(argv)
File "/src/djangoappengine/management/commands/deploy.py", line 51, in run_appcfg
call_command('syncdb', remote=True, interactive=True)
File "/src/django/core/management/__init__.py", line 150, in call_command
return klass.execute(*args, **defaults)
File "/src/django/core/management/base.py", line 232, in execute
output = self.handle(*args, **options)
File "/src/django/core/management/base.py", line 371, in handle
return self.handle_noargs(**options)
File "/src/django/core/management/commands/syncdb.py", line 110, in handle_noargs
emit_post_sync_signal(created_models, verbosity, interactive, db)
File "/src/django/core/management/sql.py", line 189, in emit_post_sync_signal
interactive=interactive, db=db)
File "/src/django/dispatch/dispatcher.py", line 172, in send
response = receiver(signal=self, sender=sender, **named)
File "/src/django/contrib/contenttypes/management.py", line 67, in update_contenttypes
ct.delete()
File "/src/django/db/models/base.py", line 599, in delete
collector.delete()
File "/src/django/db/models/deletion.py", line 61, in decorated
func(self, *args, **kwargs)
File "/src/django/db/models/deletion.py", line 261, in delete
query.delete_batch([obj.pk for obj in instances], self.using, field)
File "/src/django/db/models/sql/subqueries.py", line 44, in delete_batch
self.do_query(self.model._meta.db_table, where, using=using)
File "/src/django/db/models/sql/subqueries.py", line 29, in do_query
self.get_compiler(using).execute_sql(None)
File "/src/djangotoolbox/db/basecompiler.py", line 593, in execute_sql
self.build_query([self.query.get_meta().pk]).delete()
File "/src/djangoappengine/db/compiler.py", line 69, in _func
return func(*args, **kwargs)
File "/src/djangoappengine/db/compiler.py", line 168, in delete
Delete(keys)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/datastore.py", line 695, in Delete
return DeleteAsync(keys, **kwargs).get_result()
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/datastore.py", line 674, in DeleteAsync
keys, _ = NormalizeAndTypeCheckKeys(keys)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/datastore.py", line 176, in NormalizeAndTypeCheckKeys
keys, multiple = NormalizeAndTypeCheck(keys, (basestring, Entity, Key))
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/datastore.py", line 143, in NormalizeAndTypeCheck
arg_list = list(arg)
File "/src/djangoappengine/db/compiler.py", line 105, in fetch
query = self._build_query()
File "/src/djangoappengine/db/compiler.py", line 69, in _func
return func(*args, **kwargs)
File "/src/djangoappengine/db/compiler.py", line 322, in _build_query
return MultiQuery(self.gae_query, self.ordering)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/datastore.py", line 1998, in __init__
'MultiQuery does not support keys_only.')
django.db.utils.DatabaseError: MultiQuery does not support keys_only.
Je suis en mesure de contourner le problème en supprimant les types de contenu sur mon serveur de développement local, mais Je me demande pourquoi je reçois cette erreur. Je comprends ce que l'exception dit, mais je ne comprends pas pourquoi NonRel n'a pas adapté Django pour effectuer correctement cette opération dans App Engine?
Ouais, il est étrange qu'il fonctionne syncdb sur ma base de données locale quand je déploiera. Je suppose que c'est un double problème! – jacob