آشنایی کامل با Fixtures در Django: ایجاد، بارگذاری، کشف، ترتیب اجرا و نکات مهم

این مقاله مفهوم Fixture در Django را توضیح می‌دهد و نحوهٔ ایجاد، بارگذاری، محل جستجو، ترتیب بارگذاری، رفتار سیگنال‌ها، استفاده از فایل‌های فشرده، و مدیریت Fixtureهای مخصوص دیتابیس را بررسی می‌کند. Fixtures ابزاری قدرتمند برای بارگذاری داده‌های اولیه، داده‌های تست و داده‌های قابل حمل در پروژه‌های Django هستند.

Django Fixtures، loaddata، dumpdata، FIXTURE_DIRScompressed fixtures، raw=Trueinitial data

~2 دقیقه مطالعه · آخرین به‌روزرسانی ۱۹ اسفند ۱۴۰۴

۱. Fixture چیست؟

Fixture مجموعه‌ای از فایل‌هاست که داده‌های سریال‌شدهٔ دیتابیس را در خود نگه می‌دارند. هر Fixture یک نام یکتا دارد و می‌تواند شامل چندین فایل در مسیرهای مختلف باشد.

کاربردهای رایج Fixtures:

  • بارگذاری دادهٔ اولیه (initial data)
  • پر کردن دیتابیس تست‌ها
  • اشتراک‌گذاری داده‌های ثابت بین اپلیکیشن‌ها

۲. چگونه Fixture تولید کنیم؟

ساده‌ترین روش استفاده از دستور dumpdata است:


python manage.py dumpdata app.Model --indent 2 > mydata.json

همچنین می‌توان Fixture را دستی نوشت یا از ابزارهای serialization استفاده کرد.

۳. چگونه Fixture را استفاده کنیم؟

۳.۱ در تست‌ها


class MyTestCase(TestCase):
    fixtures = ["fixture-label"]

۳.۲ با دستور loaddata


django-admin loaddata 

۴. Django چگونه Fixtures را پیدا می‌کند؟

Django در مسیرهای زیر به دنبال Fixture می‌گردد:

  • پوشهٔ fixtures/ در هر اپ نصب‌شده
  • مسیرهای تعریف‌شده در FIXTURE_DIRS
  • مسیر literal که کاربر وارد کرده

۴.۱ اگر پسوند فایل را مشخص کنید


django-admin loaddata mydata.json

فقط فایل‌های JSON با نام mydata بارگذاری می‌شوند.

۴.۲ اگر پسوند را حذف کنید


django-admin loaddata mydata

Django همهٔ انواع Fixture (json، xml و …) را جستجو می‌کند.

۴.۳ استفاده از مسیرهای تو در تو


django-admin loaddata foo/bar/mydata.json

در این حالت Django مسیرهای زیر را بررسی می‌کند:

  • <app>/fixtures/foo/bar/mydata.json
  • <dir in FIXTURE_DIRS>/foo/bar/mydata.json
  • مسیر literal

۵. ترتیب بارگذاری Fixtures

اگر چند Fixture را با هم فراخوانی کنید، ترتیب همان است که وارد کرده‌اید:


django-admin loaddata mammals birds insects

یا در تست‌ها:


class AnimalTestCase(TestCase):
    fixtures = ["mammals", "birds", "insects"]

نکته مهم: اگر دیتابیس شما از deferred constraint checking پشتیبانی نکند، روابط بین Fixtureها ممکن است باعث خطا شود.

۶. نحوهٔ ذخیرهٔ دادهٔ Fixture در دیتابیس

هنگام بارگذاری Fixture:

  • متد save() مدل‌ها اجرا نمی‌شود
  • سیگنال‌ها با raw=True فراخوانی می‌شوند
  • فقط فیلدهای موجود در Fixture مقداردهی می‌شوند

۶.۱ غیرفعال‌کردن سیگنال‌ها هنگام loaddata


def my_handler(**kwargs):
    if kwargs["raw"]:
        return
    ...

۶.۲ استفاده از decorator


from functools import wraps

def disable_for_loaddata(handler):
    @wraps(handler)
    def wrapper(*args, **kwargs):
        if kwargs["raw"]:
            return
        return handler(*args, **

نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

فریم‌ورک Tasks در Django: راهنمای کامل اجرای کارهای پس‌زمینه در Django 6.0

Django 6.0 فریم‌ورک Tasks را معرفی کرده است؛ سیستمی داخلی برای تعریف و صف‌بندی کارهای پس‌زمینه خارج از چرخهٔ request–response. این مقاله نحوهٔ کار Tasks، پیکربندی backendها، تعریف و enqueue کردن Taskها، استفاده از context، و ادغام با سیستم‌های Worker خارجی را توضیح می‌دهد.

ادامه

پشتیبانی Asynchronous در Django: راهنمای کامل Async Views، ORM، Middleware، عملکرد و ایمنی

این مقاله پشتیبانی Django از برنامه‌نویسی غیرهم‌زمان (async) را توضیح می‌دهد. موضوعاتی مانند async views، اجرای Django تحت ASGI، رفتار middleware، قابلیت‌های ORM غیرهم‌زمان، sync_to_async، مدیریت قطع اتصال، نکات عملکردی، و مکانیزم‌های ایمنی Django برای جلوگیری از استفادهٔ ناامن async بررسی می‌شوند.

ادامه

System Check Framework در Django: راهنمای کامل نوشتن، ثبت، اجرا و تست چک‌های سیستمی

System Check Framework در Django مجموعه‌ای از بررسی‌های استاتیک برای تشخیص مشکلات رایج در پروژه است. این مقاله نحوهٔ اجرای چک‌ها، نوشتن چک‌های سفارشی، مدیریت پیام‌ها، برچسب‌گذاری چک‌ها، افزودن چک به مدل‌ها و فیلدها، و نوشتن تست‌های واحد و یکپارچه برای چک‌ها را توضیح می‌دهد.

ادامه

سیگنال‌ها در Django: راهنمای کامل استفاده، اتصال، ارسال و مدیریت Signalها

این مقاله سیستم سیگنال‌های Django را توضیح می‌دهد؛ مکانیزمی برای اطلاع‌رسانی رویدادها بین بخش‌های مختلف برنامه بدون ایجاد وابستگی مستقیم. موضوعاتی مانند نحوهٔ اتصال receiverها، استفاده از decorator، مدیریت senderهای خاص، محل مناسب قرارگیری کد سیگنال‌ها، هشدارهای مهم، و بهترین شیوه‌ها بررسی می‌شوند.

ادامه

آشنایی کامل با Django Settings: پیکربندی، مدیریت محیط، و بهترین شیوه‌ها

این مقاله یک راهنمای جامع دربارهٔ سیستم تنظیمات در Django ارائه می‌دهد. موضوعاتی مانند ساختار فایل تنظیمات، نحوهٔ تعیین DJANGO_SETTINGS_MODULE، استفاده از settings در کد، امنیت، پیکربندی دستی با configure()، استفادهٔ مستقل از Django با django.setup() و ایجاد تنظیمات سفارشی بررسی می‌شوند.

ادامه

سریال‌سازی و دسریال‌سازی در Django: راهنمای کامل کار با Serialization Framework

این مقاله سیستم سریال‌سازی Django را توضیح می‌دهد؛ از نحوهٔ تبدیل مدل‌ها به JSON، XML، YAML و JSONL گرفته تا دسریال‌سازی داده‌ها، سریال‌سازی فیلدهای انتخابی، کار با مدل‌های ارث‌بری، مدیریت روابط، و نکات مهم هنگام ذخیرهٔ داده‌های دسریال‌شده.

ادامه