مرکز آموزش میهن وب هاست

مرکز آموزش میهن وب هاست

رفع ارور IntegrityError: NOT NULL constraint failed در جنگو

پرینت این مقاله پرینت این مقاله

در SQL، از محدودیت ها (constraints) برای اعمال قوانین روی داده های موجود در پایگاه داده استفاده می شود. یکی از پایه ای ترین و پرکاربردترین constraint ها، NOT NULL است. این محدودیت اعلام می‌کند که یک ستون یا field حتما می بایست مقدار داشته باشد و امکان خالی بودن آن وجود ندارد.
خطای IntegrityError: NOT NULL constraint failed در جنگو زمانی رخ می‌دهد که شما سعی می‌کنید یک رکورد جدید را در پایگاه داده ذخیره کنید، اما مقداردهی یکی از field ها با محدودیت (NOT NULL)، انجام نشده است. field ممکن است به دلیل طراحی مدل یا تنظیمات پایگاه داده، نیاز به مقدار داشته باشد.
در این آموزش با دلایل ایجاد و راه های بررسی و رفع این خطا آشنا خواهید شد.
1- بررسی field ها با محدودیت NOT NULL
می بایست مقداردهی field ها را بررسی نمایید و توجه داشته باشید که تمام field ها با محدودیت NOT NULL، در مدل شما، مقداردهی شوند. جهت جلوگیری از خطا، می توانید برخی field ها را به صورت اختیاری تعریف نمایید. در این حالت field مذکور می تواند دارای مقدار یا بدون مقدار باشد.
قطعه کد نمونه: 
class MyModel(models.Model):
name = models.CharField(max_length=100)
description = models.TextField(null=True, blank=True)
در قطعه کد فوق یک کلاس با نام MyModel با دو ستون name و description ایجاد می گردد. ستون name یک ستون با field های NOT NULL و حداکثر ۱۰۰ کاراکتر می باشد. اما مقدار دهی ستون description اختیاری بوده و می تواند خالی باشد.
2- مقدار دهی کلید خارجی Foreign Key
گاهی ممکن است تمامی field ها را به صورت کامل مقدار دهی نمایید اما با این خطا مواجه شوید. در این حالت می بایست وجود یا عدم وجود Foreign Key ها بررسی گردد. اگر فیلدی از نوع ForeignKey بوده، مطمئن شوید که مقدار معتبری به آن اختصاص داده شده چرا که گاها این field ها و عدم وجود مقدار برای آن عامل اصلی خطا می باشد.
3- استفاده از مقادیر پیش فرض 
می توانید برای field با محدودیت NOT NULL، مقادیر پیش فرض تعریف نمایید تا در صورتی که مقدار دهی آن field انجام نشد، با مقدار پیش فرض جایگزین گردد. این کار عموما با استفاده از قطعه کدهای پایتون انجام می شود.
4- اجرای migration
ممکن است پس از اعمال تغییرات در مدل ها migration اجرا نشده باشد. اگر تغییراتی در مدل ایجاد کرده اید، از اجرای کامل migration اطمینان حاصل نمایید. 
جهت اجرای migration، پس از ورود به سی پنل، وارد منوی "Setup Python App" از بخش "software" شوید.
تصویر(1)
در بخش "Web applications"، گزینه مداد، روبروی نام پروژه تان، را انتخاب نمایید.
تصویر(2)
روی بخش مشخص شده در "تصویر3" کلیک نمایید تا عبارت به صورت خودکار کپی گردد. 
تصویر(3)
سپس در صفحه اول سی پنل، وارد "Terminal" از بخش "Advanced" شوید.
تصویر(4)
عبارت کپی شده را در "Terminal" وارد نمایید.
تصویر(5)
پس از آن کد های زیر را به ترتیب در "Terminal" اجرا نمایید تا migration انجام شود. 
python manage.py makemigrations
python manage.py migrate
به بخش ویرایش پروژه تان از مسیر زیر بازگردید و "Restart" را همانند "تصویر 6" انتخاب نمایید. 
software => Setup Python App => Web applications => ویرایش پروژه
تصویر(6)
5/5 از 1 رای