私は今非常に混乱しています。私はDjangoのスクリプトを実行して、偽のデータベースを作成し、同じコードを何度も繰り返し見回していました。私は次のエラーを取得するとき、私はすでに2,500以上のオブジェクトを作成していた:Djangoエラーが発生することがあります
ProgrammingError: autocommit cannot be used inside a transaction
私はそれを見て、明らかに固定されているバグのチケットを得たが、それは私がDjangoの1.6を使用しています&過去のバージョン、のためでした。ここでは、完全なトレースバックがある:私は最初の2500個のオブジェクトに対して、この問題を持っていなかった場合
---------------------------------------------------------------------------
ProgrammingError Traceback (most recent call last)
<ipython-input-31-0597bce30f92> in <module>()
----> 1 make_listeners()
<ipython-input-29-5697f122e144> in make_listeners()
28 seed = random.randint(0,len(user_ids_copy)-1)
29 requested_user = user_ids_copy.pop(seed)
---> 30 user.functions.listen_to(requested_user)
31 print i, user.pk, number_seed, original_seed
32 number_seed -= 1
.../models.py in listen_to(self, user_id)
715 except User.DoesNotExist:
716 return 'User DoesNotExist'
--> 717 request = ListenerRequest.objects.get_or_create(user=requesting, user_requested=requester, is_active=True)
718 if not request[1]:
719 if request.is_accepted:
/Library/Python/2.7/site-packages/Django-1.6-py2.7.egg/django/db/models/manager.pyc in get_or_create(self, **kwargs)
152
153 def get_or_create(self, **kwargs):
--> 154 return self.get_queryset().get_or_create(**kwargs)
155
156 def create(self, **kwargs):
/Library/Python/2.7/site-packages/Django-1.6-py2.7.egg/django/db/models/query.pyc in get_or_create(self, **kwargs)
378 obj = self.model(**params)
379 with transaction.atomic(using=self.db):
--> 380 obj.save(force_insert=True, using=self.db)
381 return obj, True
382 except DatabaseError:
/Library/Python/2.7/site-packages/Django-1.6-py2.7.egg/django/db/transaction.pyc in __exit__(self, exc_type, exc_value, traceback)
328 connection.autocommit = True
329 else:
--> 330 connection.set_autocommit(True)
331 # Outermost block exit when autocommit was disabled.
332 elif not connection.savepoint_ids and not connection.commit_on_exit:
/Library/Python/2.7/site-packages/Django-1.6-py2.7.egg/django/db/backends/__init__.pyc in set_autocommit(self, autocommit)
331 self.validate_no_atomic_block()
332 self.ensure_connection()
--> 333 self._set_autocommit(autocommit)
334 self.autocommit = autocommit
335
/Library/Python/2.7/site-packages/Django-1.6-py2.7.egg/django/db/backends/postgresql_psycopg2/base.pyc in _set_autocommit(self, autocommit)
171 def _set_autocommit(self, autocommit):
172 if self.psycopg2_version >= (2, 4, 2):
--> 173 self.connection.autocommit = autocommit
174 else:
175 if autocommit:
ProgrammingError: autocommit cannot be used inside a transaction
は、なぜ私はこのエラーを取得していますか?
モデル:要求されたように、そのエラーの原因となっているように見えるので、
、ここListenerRequest
のモデルである:
class ListenerRequest(models.Model):
listener_relationship_id = models.AutoField(primary_key=True)
#user is the person asking to listen
user = models.ForeignKey(User, related_name='requests')
#user_requested is the person being asked to be listen to
user_requested = models.ForeignKey(User, related_name='requested')
date_requested = models.DateTimeField(auto_now_add=True)
date_accepted = models.DateTimeField(null=True,blank=True)
denied_flag = models.BooleanField(default=False)
denied_date = models.DateTimeField(null=True,blank=True)
unlistened_flag = models.BooleanField(default=False)
unlistened_date = models.DateTimeField(null=True,blank=True)
is_active = models.BooleanField(default=True)
is_accepted = models.BooleanField(default=False)
データベースとそのバージョンについて教えてください。 –
postgres 9.3 –
_models.py_でコードを確認すると便利です。 'get_or_create()'は他のオブジェクトを変更している間にオブジェクトを作成しようとしていますか? – Rohan