سؤال

أحاول إضافة بعض البيانات إلى قاعدة البيانات بمجرد إنشاء الجداول، وذلك باستخدام post_syncdb الإشارة.

signals.post_syncdb.connect(init)

ثم في وظيفة init، أريد تعيين الإذن، لذلك أستخدمه

ct = ContentType.objects.get(app_label='news', model='Article')
Permission(name='Approve articles', codename='can_approve_article', content_type=ct)

ولكن إذا قمت بإسقاط كافة الجداول وتشغيلها syncdb, ، انا حصلت

...
File "...\base\functions\init.py", line 11, in init
  ct = ContentType.objects.get(app_label='news', model='Article')
...
django.contrib.contenttypes.models.DoesNotExist: ContentType matching query does not exist.

بعض الاختبارات التي قمت بها:

  • إنه يعمل بشكل جيد إذا جربت هذا الرمز في الخارج syncdb.
  • كما أنه يعمل بشكل جيد إذا سمحت syncdb أنشئ جميع الجداول بدون هذا الرمز، ثم أضف هذا الرمز وقم بتشغيل syncdb دون الحاجة إلى إجراء أي تغييرات.
  • وأنا متأكد تمامًا من أن الأمر كان ناجحًا، لكنني غيرت الكثير من الأشياء في أماكن أخرى منذ ذلك الحين، لذلك لا أعرف من أين أبدأ.
  • أحصل على نفس الخطأ بالنسبة للنماذج الأخرى في تطبيقات مختلفة.
  • يتم إطلاق الإشارة حوالي 10 مرات، فقط في المرات القليلة الأولى يتم إلقاء الخطأ.

شكرا جزيلا على أي تلميحات!

هل كانت مفيدة؟

المحلول

أضف هذا إلى بداية وظيفة init الخاصة بك:

 from django.contrib.contenttypes.management import update_all_contenttypes
 update_all_contenttypes() # make sure all content types exist
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top