استعلام مطابقة ContentType غير موجود في post_syncdb
-
12-12-2019 - |
سؤال
أحاول إضافة بعض البيانات إلى قاعدة البيانات بمجرد إنشاء الجداول، وذلك باستخدام 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
لا تنتمي إلى StackOverflow