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

كيفية إستيراد ملف CSV إلى نموذج model في جانغو Django؟

Mohssen A Mohssen

السؤال

لدي بعض البيانات في ملف CSV وأريد استيرادها إلى نماذج model في جانغو Django ، هنا شكل البيانات التي أريد إستيرادها:

1;"product_1";"20.59";"product description";
2;"product_2";"29.99";"product description";
3;"product_3";"18.25";"product description";
4;"product_4";"37.50";"product description";

لدي نموذج باسم Product. وأريد أن أقوم بإستيراد ملف CSV السابق إلى الحقول الموجودة في النموذج مثل الاسم name والوصف description والسعر price 

كيف أقوم بهذا الأمر؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

يُمكنك إنشاء أمر في جانغو يقوم بقراءة ملف ال CSV وإدخال المعلومات داخل النموذج Product.

لإنشاء الأمر نقوم بإنشاء مجلد داخل تطبيق جانغو ونقوم بتسميته management، داخل هذا المجلد نقوم بإنشاء مجلد آخر اسمه commands،  وبداخله نقوم بإنشاء ملف بايثون يحمل الإسم  insert_products_from_csv.py.

نقوم بوضع هذه الشفرة داخل الملف.

from django.core.management.base import BaseCommand
import csv


class Command(BaseCommand):
    help = 'إنشاء كائنات إنطلاقاً من ملف csv'

    def add_arguments(self, parser):
        parser.add_argument('--path', type=str, help="مسار الملف")
        

    def handle(self, *args, **options):
      	# نجلب مسار الملف
        file_path = options['path']
        # نقرأ الملف
        with open(file_path, 'rb') as csv_file:
            reader = csv.reader(csv_file, delimiter=';')
            for row in reader:
                # نستخرج معلومات المُنتج من كل سطر
                product_id = row[0]
                product_name = row[1]
                product_price = row[2]
                product_description = row[3]
                # نحفظ المعلومات في النموذج
                person, created = Person.objects.update_or_create(
                   id=product_id, name=product_name, price=product_price, description=product_description
                )

لتشغيل الأمر نكتب

python manage.py insert_products_from_csv --path "هنا نضع مسار الملف كاملاً"

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

هناك مكتبة كاملة في django تقوم بذلك الأمر و هي django import export

يمكن تثبيتها عن طريق الأمر التالي في موجة الأوامر بعد تفعيل البيئة الإفتراضية virtualenv

pip install django-import-export

ثم قم بإضافة المكتبه كتطبيق ضمن التطبيقات المثبته في المشروع بملف settings.py داخل خانة INSTALLED_APPS

'import_export'

قم بالتوجه لملف admin.py داخل التطبيق الذي يوجد به النموذج المراد تصدير أو إستيراد البيانات له

ثم قم بإستيراد السطر التالي لإستدعاء مكتبة import export

from import_export.admin import ImportExportModelAdmin

و لكن في تلك الحاله لا يمكن تسجيل النموذج بالشكل الإفتراضي الخاص به حيثُ يجب تغيير طريقة تسجيلة على سبيل المثال أريد تسجيل النموذج Volunteering في ملف admin.py حيثُ نقوم بتسجيله بالشكل التالي بالطريقة الإفتراضية

from django.contrib import admin
from .models import Volunteering 
from import_export.admin import ImportExportModelAdmin


admin.site.register(Volunteering)

لكن في حال أردت إستخدام مكتبة import export يجب تعديل طريقة التسجيل لتكن بالشكل التالي :

from django.contrib import admin
from .models import Volunteering 
from import_export.admin import ImportExportModelAdmin



@admin.register(Volunteering)
class VolImportExport(ImportExportModelAdmin):
    pass


ملحوظه : يمكن تعديل إسم الـ class بالإسم الذي تريد فهو متغير أما ما بين الأقواس فهو ثابت كذلك ال decorator فوق ال class ثابت أيضاً 

ثم تقوم بفتح لوحة تحكم الموقع الخاص بك بشكل إفتراضي ثم تتجه للنموذج الذي تريد فيه استدعاء به مكتبة import export فستجد بجانب " إضافة " انه ظهر أزرار جديده " تصدير , إستيراد " مثل الصورة المرفقة حيثُ يمكنك تصدير او استيراد البيانات للنموذج مباشرة عن طريق العديد من الصيغ مثل csv , xls , xlsx , json , yaml و غيرها الكثير

Web capture_1-3-2022_15820_192.168.1.105.jpeg

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...