"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكن إنشاء نماذج Django ديناميكيًا لجداول متعددة ذات مخططات مشتركة وأسماء ديناميكية؟

كيف يمكن إنشاء نماذج Django ديناميكيًا لجداول متعددة ذات مخططات مشتركة وأسماء ديناميكية؟

تم النشر بتاريخ 2024-11-04
تصفح:362

How can Django models be dynamically created for multiple tables with shared schemas and dynamic names?

إنشاء نموذج ديناميكي لجداول متعددة في جانغو

بالنسبة لقاعدة بيانات تحتوي على العديد من الجداول المؤقتة مع المخططات المشتركة والأسماء الديناميكية، فإن دمج جانغو يمثل تحديات . ومع ذلك، من الممكن استخدام وظيفة المصنع لإنشاء نماذج تحتوي على جداول قاعدة بيانات ديناميكية.

إدارة جدول قاعدة البيانات الديناميكية

تقوم وظيفة المصنع بإرجاع نموذج بقاعدة بيانات محددة طاولة. يسمح هذا بربط البيانات الديناميكية بناءً على أسماء الجداول:

def getModel(db_table):
  class MyClass(models.Model):
    # Model definition goes here...
    class Meta:
      db_table = db_table
  return MyClass
يمكنك بعد ذلك إنشاء مثيل للنموذج باستخدام اسم الجدول المحدد:

newClass = getModel('29345794_table')
newClass.objects.filter(...)

فئة تعريفية لتسمية الفئة الديناميكية

نظرًا لأن Django يقوم بتخزين سمة _meta للفئة مؤقتًا، فإن فئة التعريف ضرورية لتعديل اسم الفئة في وقت التشغيل:

def getModel(db_table):
  class MyClassMetaclass(models.base.ModelBase):
    def __new__(cls, name, bases, attrs):
      name  = db_table
      return models.base.ModelBase.__new__(cls, name, bases, attrs)

  class MyClass(models.Model):
    __metaclass__ = MyClassMetaclass
    class Meta:
      db_table = db_table
  return MyClass

اعتبارات إضافية

على الرغم من الاعتقاد في البداية أنه غير قابل للتغيير، إلا أنه يمكن تعيين جدول قاعدة البيانات ديناميكيًا:

MyModel._meta. db_table = '10293847_table'
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3