سؤال

لديّ نموذج مع تشارفيلد كان لديه في وقت سابق "فريد" تم تعيينه إلى True ، ولكن تم تغيير Wich الآن إلى خطأ. لكن عندما أحاول حفظ هذا الحقل بشيء موجود ، لا يزال Django يلقي IntegrityError.

كيف يمكنني تغيير هذا السلوك بحيث يسمح بقيم غير متميزة؟

قاعدة البيانات هي mysql.

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

المحلول

إسقاط الفهرس الفريد.

نصائح أخرى

أقترح استخدام http://south.aeracode.org, ، إنه تطبيق ترحيل DB لـ Django ويسمح بإجراء مثل هذه التغييرات دون حتى لمس MySQL shell/admin. وبهذه الطريقة لديك نوع من وحدات الماكرو القابلة لإعادة التشغيل لتحديث أي جهاز كمبيوتر إلى أحدث مخطط DB.

واستخدامه بسيط مثل ما كتبوه هنا: http://south.aeracode.org/wiki/Convertinganapp

هل تأكدت من إعادة توصيل قاعدة البيانات الخاصة بك في Django باستخدام أمر "Python Manage.py SyncDB" في سطر الأوامر قبل إعادة تشغيل تطبيق الويب الخاص بك؟ هذا قد يحل مشكلتك.

كنت أحاول أن أفعل الشيء نفسه ، ووجدت أنه في Django-South 0.5 ، لا يتعامل الجنوب من أجلك.

كما تم ذكره في التعليقات السابقة ، على الأرجح ، يجب عليك إنشاء ترحيل الجنوب أولاً ، ولكن بعد ذلك ، سيتعين عليك الدخول يدويًا وحذف الفهرس الفريد الذي ينشئه Django في البداية عندما تقوم بأول syncdb.

use mydb;
desc mytable;

سيوضح لك ذلك المخطط للجدول ، وسترى أن الحقل سيظل لديه قيمة "UNI" في العمود الرئيسي.

SHOW INDEX FROM mytable FROM mydb;

يجب أن يكون فهرسًا يحتوي على غير محدد على 0.

ALTER TABLE mytable DROP INDEX indexname;

إذا نظرت إلى مخطط الجدول مرة أخرى ، فسترى أن "UNI" لم يعد في عمود المفاتيح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top