وEAV-جانغو هو التطبيق جانغو قابلة لإعادة الاستخدام التي توفر تنفيذ نموذج البيانات الكيان السمة القيمة.
وعنبسة؛ نموذج الكيان السمة القيمة (EAV)، المعروف أيضا باسم طراز كائن السمة القيمة ومخطط مفتوح والذي يستخدم في الظروف التي يكون فيها عدد من الصفات (الخصائص، المعلمات) التي يمكن استخدامها لوصف شيء (و" كيان "أو" وجوه ") يحتمل ان يكون واسع جدا، ولكن الرقم الذي سيتم تطبيقها في الواقع إلى كيان معين هو متواضع نسبيا.
EAV-جانغو يعمل بشكل جيد مع RDBMS التقليدي (اختبار على برنامج SQLite و MySQL).
أولويات
نما التطبيق من مشروع متجر على الانترنت، لذلك هو عملي جدا، وليس مجرد ممارسة أكاديمية. وكانت الأولويات الرئيسية:
على & nbsp؛ 1. المرونة من البيانات،
على & nbsp؛ 2. كفاءة الاستفسارات، و
على & nbsp؛ 3. أقصى قدر من الصيانة دون تحرير التعليمات البرمجية.
بالطبع هذا يعني المقايضات، وكان الهدف هو العثور على أقل الجمع ضارة للحالة العامة.
ميزات
جميع النماذج المقدمة هي مجردة، أي EAV-جانغو لا تخزن أي معلومات في الجداول الخاصة بها. بدلا من ذلك، فإنه يوفر أساسا للنماذج الخاصة بك والتي سيكون لها دعم EAV من خارج منطقة الجزاء.
وAPI EAV تشمل ما يلي:
على & nbsp؛ * إنشاء / تحديث / وصول: توفر الحالات نموذج API ستاندارت لكل من المجالات "الحقيقية" والصفات EAV. التجريد، ومع ذلك، لا يقف في طريقك، ويوفر وسائل للتعامل مع الاشياء الأساسي.
ونبسب؛ * سؤال: وتشمل BaseEntityManager نهج موحد في فلتر () واستبعاد () للاستعلام "الحقيقي" والصفات EAV.
ونبسب؛ * المخطط تخصيص لالصفات.
ونبسب؛ * مشرف: جميع المواصفات الديناميكية يمكن أن تكون ممثلة وتعديلها في المشرف جانغو بلا أو القليل من الجهد (باستخدام eav.admin.BaseEntityAdmin). يمكن تحرير المخطط على حدة، ككائنات نموذج جانغو العادية.
ونبسب؛ * المظاهر: ابحث عن وجه من وجوه هو سمة هامة من المحلات التجارية على الإنترنت، والكتالوجات، الخ أساسا كنت سوف تحتاج إلى شكل يمثل مجموعة فرعية معينة من سمات نموذج مع الحاجيات والخيارات المناسبة بحيث يمكن للمستخدم اختيار القيم المرغوبة من بعض الخصائص، تقديم شكل والحصول على قائمة من البنود مطابقة. في جانغو تصفية القضية العامة ستفعل، لكنها لن تعمل مع EAV، لذلك يوفر EAV-جانغو مجموعة كاملة من الأدوات لذلك.
أمثلة
دعونا تحديد نموذج سهل EAV، وخلق سمة EAV ونرى كيف يتصرف. قبل "سمات EAV" أعني تلك المخزنة في قاعدة البيانات ككائنات منفصلة ولكن الوصول إليها والبحث في مثل هذه الطريقة كما لو كانت الأعمدة في الجدول للمنشأة:
من نماذج استيراد django.db
من eav.models BaseEntity الاستيراد، BaseSchema، BaseAttribute
الطبقة الفاكهة (BaseEntity):
على & nbsp؛ عنوان = models.CharField (MAX_LENGTH = 50)
الطبقة مخطط (BaseSchema):
على & nbsp؛ تمريرة
الطبقة ATTR (BaseAttribute):
على & nbsp؛ مخطط = models.ForeignKey (مخطط، related_name = 'attrs')
# في بيثون قذيفة:
# types تحدد السمة اسمه "لون"
>>> لون = Schema.objects.create (
... عنوان = "اللون"،
... اسم = 'لون'، # تجاهل لملء / slugify من اللقب
... نوع البيانات = Schema.TYPE_TEXT
...)
# خلق كيان
>>> ه = Fruit.objects.create (عنوان = 'أبل'، لون = 'الأخضر')
# تعريف "الحقيقي" وEAV سمات بنفس الطريقة
>>> e.title
'تفاحة'
>>> e.colour
'الأخضر'
>>> e.save () # يتعامل مع EAV سمات تلقائيا
# قائمة سمات EAV عن حالات ATTR
>>> e.attrs.all ()
[
# في البحث عن طريق سمة EAV كما لو كان حقل العاديين
>>> Fruit.objects.filter (لون = 'الأصفر')
[<الفاكهة: التفاح>]
# ويدعم جميع عمليات البحث مركب
>>> Fruit.objects.filter (colour__contains = 'الصراخ')
[<الفاكهة: التفاح>]
لاحظ أنه يمكننا الوصول وتعديل ولون الاستعلام كما لو كان حقل الكيان صحيح، ولكن في نفس الوقت اسمها ونوعها وحتى existance وتعرف تماما من قبل مثيل مخطط. يمكن أن يفهم كائن مخطط كطبقة، والأشياء ATTR المتعلقة حالات لها. وبعبارة أخرى، كائنات مخطط تشبه CharField، IntegerField وكذا، تعرف فقط على مستوى البيانات، وليس ترميز بجد في بيثون. ويمكن "مثيل" لأي كيان (إلا إذا كنت وضعت قيود العرف والتي هي خارج منطقة EAV-جانغو من المسؤولية).
وتعرف أسماء السمات في المخطط ذات الصلة. هذا يمكن أن يؤدي إلى مخاوف من أن مرة واحدة يتم تغيير اسم ورمز هو الذهاب الى كسر. في الواقع هذا ليس هو الحال كما تستخدم أسماء مباشرة فقط لعمليات البحث اليدوي. في جميع الحالات الأخرى هي التي شيدت في عمليات البحث من دون أسماء الثابت تلوينها، ومترابطة الكائنات EAV بواسطة المفاتيح الأساسية، وليس من الأسماء. أسماء موجودة إذا الأشكال، ولكن يتم إنشاء أشكال اعتمادا على الحالة الراهنة للالفوقية، حتى تتمكن من إعادة تسمية بأمان المخطط. ما يمكنك كسر من واجهة الادارة هي أنواع. إذا قمت بتغيير نوع بيانات مخطط، وجميع خصائصه لا تزال هي نفسها ولكن سوف تستخدم عمود آخر لتخزين قيمهم. عند استعادة نوع البيانات والقيم المخزنة سابقا مرئية مرة أخرى.
نرى اختبارات لمزيد من الأمثلة.
أنواع البيانات
بنية الفوقية يحركها يمتد من المرونة ولكن يعني بعض المقايضات. واحد منهم هو زيادة عدد التحام (، وبالتالي الاستفسارات أبطأ). وآخر هو أقل أنواع البيانات. من الناحية النظرية، فإننا يمكن أن تدعم جميع أنواع البيانات المتاحة للتخزين، ولكن في واقع الامر انه سيعني خلق العديد من الأعمدة في السمة مع عدد قليل المستخدمة - بالضبط ما كنا نحاول تجنب باستخدام EAV. هذا هو السبب في EAV-جانغو يدعم فقط بعض أنواع أساسية (على الرغم من أنك يمكن أن تمتد هذه القائمة إذا لزم الأمر):
ونبسب؛ * Schema.TYPE_TEXT، وهو الحقل النصي.
ونبسب؛ * Schema.TYPE_FLOAT، وهو FloatField.
ونبسب؛ * Schema.TYPE_DATE، وهو DateField.
ونبسب؛ * Schema.TYPE_BOOL، وهو NullBooleanField.
ونبسب؛ * Schema.TYPE_MANY للخيارات متعددة (أي قوائم القيم).
يتم تخزين كافة سمات EAV كما السجلات في جدول مع مجموعات فريدة من الإشارات إلى الكيانات والمخطط. (المشار إليها الكيان من خلال الإطار contenttypes، المشار إليها المخطط عن طريق المفتاح الخارجي). وبعبارة أخرى، يمكن أن يكون هناك سمة واحدة فقط مع كيان معين والمخطط. مخطط هو تعريف السمة. يحدد مخطط الاسم، العنوان، نوع البيانات وعدد من الخصائص الأخرى التي تنطبق على أي سمة من هذا المخطط. عندما كنا الوصول أو البحث سمات EAV، والآلات EAV يستخدم دائما المخطط كما سمات الفوقية. لماذا؟ لأنه يتم تخزين اسم السمة في مخطط ذي صلة، ويتم تخزين قيمة في عمود من الجدول الصفات. نحن لا نعرف أي عمود ما هو عليه حتى ننظر إلى البيانات الوصفية.
في المثال المقدمة أعلاه نحن قد لعبت فقط مع سمة النص. جميع أنواع أخرى تتصرف بالضبط نفس ما عدا TYPE_MANY. وكثير لكثير حالة خاصة لأنها تنطوي على نموذج إضافي للالخيارات. يوفر EAV-جانغو نموذج المجرد ولكن يتطلب منك تحديد النموذج المتماسك (على سبيل المثال الاختيار)، وأشر إلى أنه من نموذج سمة (أي وضع المفتاح الخارجي المسمى "الاختيار"). فإن نموذج الاختيار أيضا إلى نقطة في المخطط. تحقق من الاختبارات للحصول على مثال
ما هو الجديد في هذا الإصدار:
إنشاء / تحديث / وصول: حالات نموذج توفر API ستاندارت على حد سواء ومثل، حقيقية ومثل؛ حقول وسمات EAV. التجريد، ومع ذلك، لا يقف في طريقك، ويوفر وسائل للتعامل مع الاشياء الأساسي.
الاستعلام: يشمل BaseEntityManager نهج موحد في فلتر () واستبعاد () للاستعلام ومثل، حقيقية ومثل. وEAV الصفات.
المخطط تخصيص لالصفات.
مشرف: جميع المواصفات الديناميكية يمكن أن تكون ممثلة وتعديلها في المشرف جانغو بلا أو القليل من الجهد (باستخدام eav.admin.BaseEntityAdmin). يمكن تحرير المخطط على حدة، ككائنات نموذج جانغو العادية.
جوانب: ابحث عن وجه من وجوه هو سمة هامة من المحلات التجارية على الإنترنت، والكتالوجات، الخ في الأساس سوف تحتاج إلى شكل يمثل مجموعة فرعية معينة من سمات نموذج مع الحاجيات والخيارات المناسبة بحيث يمكن للمستخدم اختيار القيم المرغوبة من بعض الخصائص، تقديم النموذج و الحصول على قائمة من البنود مطابقة. في جانغو تصفية القضية العامة ستفعل، لكنها لن تعمل مع EAV، لذلك يوفر EAV-جانغو مجموعة كاملة من الأدوات لذلك.
المتطلبات:
بيثون
جانغو
لم يتم العثور على التعليقات