اذهب إلى المحتوى

السؤال

نشر

لدي حقل uuid وفي ملف التهجير migrationبالشكل التالي:

import uuid
from django.db import migrations, models

class Migration(migrations.Migration):

    # ...

    operations = [
        # ...
        migrations.AddField(
            model_name='product',
            name='uuid',
            field=models.UUIDField(default=uuid.uuid4, unique=True),
        ),
    ]

لكن المشكلة تحدث عندما أقوم بتشغيل أمر التهجير:

py manage.py migrate

يظهر لي الخطأ التالي:

django.db.utils.IntegrityError: could not create unique index "stores_product_uuid_key" DETAIL: Key (uuid)=(003c17e3-0301-4251-bf6e-87b6932d826b) is duplicated.

ما سبب الخطأ؟ وكيف أقوم بحل هذه المشكلة؟

Recommended Posts

  • 1
نشر (معدل)

اذا كنت تريد ان يكون uuid وان يكون هو PrimaryKey للجدول اي انه لا يمكن تكراره unique اكتب فقط primary_key=True يصبح unique عليك كتابة في class Product:

import uuid
from django.db import models

class Product(models.Model):
    uuid = models.UUIDField(primary_key=True, default=uuid.uuid4)

من الممكن ايضاً وليس أكيد ان يكون لديك تعارض في البيانات السابقة في قاعدة البيانات لأنك تقوم بتغيير على هيكلية الجدول فعليك حينها حذف قاعدة البيانات ومن ثم احذف كل شيء باستثناء ملف init__.py__ في مجلد migration في جميع apps Django سأرفق بصورة اي الملفات التي سوف تُحذف لحذف قاعدة البيانات وملف الmigrations في app  في مشروع  بعد ذلك قم بعمل :

python manage.py makemigrations and python manage.py migrate

لقطة الشاشة 2022-06-26 190216.jpg

تم التعديل في بواسطة Haroun Taha
  • 0
نشر

جرب إستخدام أحد الحلول التاية :
1- الرجوع لعمليات migrations  السابقة:
0005 هي رقم ملف migrations :
0005 هي فقط مثال على إسم أحد ملفات migrations 

python manage.py migrate <app_label> 0005

2- بعدها أحذف جميع الملفات التي بعد الملف الذي تريد الرجوع من عنده. اي مثلا 0005.
3- قم بعمل migrations:
 

 python manage.py makemigrations
python manage.py migrate

الحل الثاني:
قم بدمج migrations بسخدام --merge

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...