EAV-Django

צילום מסך תוכנה:
EAV-Django
פרטי תוכנה:
גרסה: 1.4.4
טען תאריך: 14 Apr 15
מפתחים: Andrey Mikhaylenko
רשיון: ללא תשלום
פופולריות: 2

Rating: nan/5 (Total Votes: 0)

EAV-Django הוא אפליקציה Django לשימוש חוזר המספקת יישום מודל נתונים הישות-תכונה-הערך.
& Nbsp; מודל ישות-תכונה-ערך (EAV), הידוע גם במודל אובייקטים-תכונה-ערך וסכימה פתוחה המשמש בנסיבות בן מספר המאפיינים (תכונות, פרמטרים), שניתן להשתמש כדי לתאר את דבר (" ישות "או" אובייקט ") הוא פוטנציאל מאוד גדולה, אבל המספר שלמעשה יחול על ישות נתונה הוא צנוע יחסית.
EAV-Django עובד בסדר גמור עם RDBMS המסורתי (נבדק על SQLite ו- MySQL).
סדר עדיפויות
היישום גדל מפרויקט חנות מקוון, כך שזה די מעשי ולא רק תרגיל אקדמי. סדרי העדיפויות העיקריות היו:
& Nbsp; 1. גמישות של נתונים,
& Nbsp; 2. יעילות של שאילתות, ו
& Nbsp; 3. תחזוקה המרבית מבלי לערוך את הקוד.
כמובן שזה מרמז פשרות, והמטרה הייתה למצוא את השילוב שפגיעתו הפחות למקרה הכללי.
תכונות
כל הדגמים הניתנים הם מופשטים, כלומר EAV-Django אינו מאחסן את כל מידע בשולחנות שלה. במקום זאת, הוא מספק בסיס למודלים משלך שיש להם תמיכה לEAV מחוץ לקופסא.
API EAV כולל:
& Nbsp; * יצירה / עדכון / גישה: מקרי מודל מספקים API סטנדרט עבור שני שדות "אמיתיים" וEAV תכונות. ההפשטה, לעומת זאת, אינה עומדת בדרך שלך ומספקת אמצעים להתמודד עם הדברים הבסיסיים.
& Nbsp; * שאילתה: BaseEntityManager כולל גישה אחידה במסנן () ולא לכלול () לשאילתא "אמיתית" וEAV תכונות.
& Nbsp; * סכימות להתאמה אישית עבור תכונות.
& Nbsp; * Admin: יכולה להיות מיוצגות כל התכונות הדינמיות ושינוי במנהל Django עם מעט מאמץ (באמצעות eav.admin.BaseEntityAdmin) לא או. ניתן לערוך סכימות בנפרד, כאובייקטי מודל Django רגילים.
& Nbsp; * היבטים: היבט חיפוש הוא תכונה חשובה של חנויות מקוונות, קטלוגים, וכו 'בעיקרון אתה צריך טופס מייצג קבוצת משנה מסוימת של מודל מייחסת עם יישומונים ובחירות מתאימים, כך שהמשתמש יכול לבחור ערכים רצויים של כמה מאפיינים, להגיש את הטופס וקבל רשימה של פריטים תואמים. במקרה כללי Django-המסנן יעשה, אבל זה לא יעבוד עם EAV, כך EAV-Django מספק סט של כלים שלשלמים.
דוגמאות
בואו נגדיר מודל EAV-ידידותי, ליצור תכונת EAV ולראות איך הוא מתנהג. על ידי "EAV תכונות" אני מתכוון לאלה מאוחסנים במסד הנתונים כאובייקטים נפרדים אך גישה וחיפשו בצורה כזאת, כאילו היו עמודים בשולחן של הישות:
ממודלי יבוא django.db
מeav.models BaseEntity יבוא, BaseSchema, BaseAttribute
פירות כיתה (BaseEntity):
& Nbsp; title = models.CharField (MAX_LENGTH = 50)
כיתת סכימה (BaseSchema):
& Nbsp; כרטיס
הכיתה attr (BaseAttribute):
& Nbsp; סכימה = models.ForeignKey (Schema, related_name = 'attrs')
# בקליפת פייתון:
# מגדיר תכונה בשם "צבע"
>>> Color = Schema.objects.create (
... Title = 'צבע',
... Name = 'צבע', # להשמיט כדי לאכלס / slugify מכותרת
... סוג הנתונים = Schema.TYPE_TEXT
...)
# ליצור ישות
>>> E = Fruit.objects.create (title = 'אפל', color = "ירוק")
# להגדיר "אמיתי" וEAV מייחס את אותה הדרך
>>> E.title
'אפל'
>>> E.colour
"ירוק"
>>> E.save () # עסקות עם EAV מייחסת באופן אוטומטי
תכונות EAV # רשימה כמקרי attr
>>> E.attrs.all ()
[]
# חיפוש על ידי תכונת EAV כאילו זה היה שדה רגיל
>>> Fruit.objects.filter (צבע = 'צהוב')
[<פירות: תפוח>]
# כל חיפושי המתחם נתמכים
>>> Fruit.objects.filter (colour__contains = 'לצעוק')
[<פירות: תפוח>]
שים לב שאנו יכולים לגשת, לשנות וצבע שאילתא כאילו זה היה שדה ישות אמיתי, אבל באותו הזמן שלה שם, סוג ואפילו קיום מוגדר לחלוטין על ידי דוגמא סכימה. ניתן להבין אובייקט סכימה כתובענה, וחפצים הקשורים attr מקרים שלה. במילים אחרות, אובייקטי סכימה הם כמו CharField, IntegerField וכאלה, שהוגדרו רק ברמת הנתונים, לא בקידוד קשיח בפייתון. והם יכולים להיות "מופעים" לכל ישות (אלא אם אתה שם את האילוצים מותאמים אישית אשר נמצאים מחוץ לאזור של EAV-Django אחריות).
השמות של תכונות מוגדרים בסכימות קשורות. זה יכול להוביל לפחדים שברגע שמשתנה שם, הקוד הוא הולך לשבור. למעשה זה לא המקרה כמו שמות משמשים רק ישירות לחיפושים במדריך. בכל שאר המקרים החיפושים בנויים ללא שמות בקידוד קשיחים, ואובייקטי EAV שלובים על ידי מפתחות ראשיים, לא בשמות. שמות נוכחים אם צורות, אבל הצורות נוצרות בהתאם למצב הנוכחי של מטה-נתונים, כך שאתה יכול לשנות את שם הסכימות בבטחה. מה אתה יכול לשבור מתוך ממשק הניהול הוא הסוגים. אם תשנה את סוג הנתונים של סכימה, כל התכונות שלו תישאר זהות אך תשתמש עמודה נוספת לאחסון הערכים שלהם. כאשר אתם משחזרים את סוג הנתונים, ערכים שאוחסנו בעבר נראים שוב.
ראה בדיקות לדוגמאות נוספות.
סוגי נתונים
מבנה מונע Metadata משתרע גמישות אך מרמז כמה פשרות. אחד מהם הוא גדל מספר מצטרף (ולכן, שאילתות איטיות יותר). נוסף הוא סוגים פחות נתונים. באופן תיאורטי, אנחנו יכולים לתמוך בכל סוגי הנתונים הזמינים לאחסון, אבל בפועל זה אומר יצירת עמודים רבים לתכונה עם רק כמה בשימוש - בדיוק מה שאנחנו מנסים להימנע על ידי שימוש EAV. זו הסיבה מדוע EAV-Django תומך רק בכמה סוגים בסיסיים (למרות שאתה יכול להרחיב רשימה זו במידת צורך):
& Nbsp; * Schema.TYPE_TEXT, TextField;
& Nbsp; * Schema.TYPE_FLOAT, FloatField;
& Nbsp; * Schema.TYPE_DATE, DateField;
& Nbsp; * Schema.TYPE_BOOL, NullBooleanField;
& Nbsp; * Schema.TYPE_MANY לבחירות מרובות (כלומר רשימות של ערכים).
כל תכונות EAV מאוחסנות כרשומות בטבלה עם שילובים ייחודיים של אזכור לגופים ולסכימות. (ישות הפניה באמצעות מסגרת CONTENTTYPES, סכימת הפניה באמצעות מפתח זר.) במילים אחרות, יכולה להיות רק אחד תכונה עם ישות וסכימה נתון. הסכימה היא הגדרה של תכונה. הסכימה מגדירה שם, שם, סוג הנתונים ומספר נכסים נוספים שיחולו על כל תכונה של סכמה זו. כאשר אנו לגשת או לחפש תכונות EAV, מכונות EAV תמיד משתמשת בסכימות כמו metadata תכונות. למה? בגלל השם של התכונה מאוחסן בסכמה בנושא, ואת הערך מאוחסן בעמודה של טבלת התכונות. אנחנו לא יודעים איזו עמודה זה עד שמסתכלים מטה.
בדוגמא האמורה לעיל אנו כבר שיחקנו עם תכונת טקסט בלבד. כל הסוגים אחרים מתנהגים בדיוק אותו הדבר, פרט לTYPE_MANY. מקרה מיוחד הוא רב-לרבים כמו זה כרוך מודל נוסף לבחירות. EAV-Django מספק מודל מופשט, אלא מחייב אותך להגדיר מודל בטון (למשל בחירה), ונקודה אליה ממודל התכונה (מפתח זר כלומר לשים בשם "בחירה"). גם מודל הבחירה יצטרך להצביע על הסכימה. בדקו את המבחנים לדוגמא

מה חדש במהדורה זו:.

  • יצירה / עדכון / גישה: מקרי מודל מספקים API סטנדרט עבור שני & quot; אמיתי & quot; שדות ותכונות EAV. ההפשטה, לעומת זאת, אינה עומדת בדרך שלך ומספקת אמצעים להתמודד עם הדברים הבסיסיים.
  • שאילתה: BaseEntityManager כולל גישה אחידה במסנן (ו) לא לכלול () לשאילתא & quot; אמיתי & quot; וEAV תכונות.
  • סכימות להתאמה אישית עבור תכונות.
  • Admin: יכולה להיות מיוצגות כל התכונות הדינמיות ושינוי במנהל Django עם מעט מאמץ (באמצעות eav.admin.BaseEntityAdmin) לא או. סכימות ניתן לערוך בנפרד, כאובייקטי מודל Django רגילים.
  • היבטים: היבט חיפוש הוא תכונה חשובה של חנויות מקוונות, קטלוגים, וכו 'בעיקרון אתה צריך טופס מייצג קבוצת משנה מסוימת של מודל מייחס עם יישומונים ובחירות מתאימים, כך שהמשתמש יכול לבחור ערכים רצויים של כמה מאפיינים, להגיש את הטופס וקבל רשימה של פריטים תואמים. במקרה כללי Django-המסנן יעשה, אבל זה לא יעבוד עם EAV, כך EAV-Django מספק סט של כלים שלשלמים.

דרישות :

  • Python
  • Django

תוכנות אחרות של יזם Andrey Mikhaylenko

Monk
Monk

14 May 15

Timetra
Timetra

14 Apr 15

תגובות ל EAV-Django

תגובות לא נמצא
להוסיף הערה
הפעל את התמונות!