EAV-Django

Screenshot Λογισμικό:
EAV-Django
Στοιχεία Λογισμικού:
Εκδοχή: 1.4.4
Ανεβάστε ημερομηνία: 14 Apr 15
Προγραμματιστής: Andrey Mikhaylenko
Άδεια: Δωρεάν
Δημοτικότητα: 2

Rating: nan/5 (Total Votes: 0)

ΕΠΑ-Django είναι ένα επαναχρησιμοποιήσιμο Django app που παρέχει μια εφαρμογή του μοντέλου δεδομένων οντοτήτων-χαρακτηριστικού-τιμής.
& Nbsp? Μοντέλο οντοτήτων-Ιδιότητα-Αξία (ΕΠΑ), επίσης γνωστή ως μοντέλο αντικειμένου-χαρακτηριστικού-τιμής και ανοικτό σχήμα, το οποίο χρησιμοποιείται σε περιπτώσεις όπου ο αριθμός των χαρακτηριστικών (ιδιοτήτων, παράμετροι) που μπορεί να χρησιμοποιηθεί για να περιγράψει ένα πράγμα (ένα " οντότητα »ή« αντικείμενο ») είναι δυνητικά πολύ μεγάλη, αλλά ο αριθμός που θα εφαρμοστεί στην πράξη σε μια δεδομένη οντότητα είναι σχετικά μέτρια.
ΕΠΑ-Django δουλεύει μια χαρά με την παραδοσιακή RDBMS (δοκιμαστεί σε SQLite και την MySQL).
Προτεραιότητες
Η εφαρμογή αναπτύχθηκε από ένα online κατάστημα του έργου, έτσι ώστε να είναι αρκετά πρακτικό και όχι μόνο ακαδημαϊκή άσκηση. Οι κύριες προτεραιότητες είναι οι εξής:
& Nbsp? 1. ευκαμψία των στοιχείων,
& Nbsp? 2. αποδοτικότητα των ερωτημάτων, και
& Nbsp? 3. μέγιστη διατηρησιμότητα χωρίς να επεξεργαστείτε τον κώδικα.
Φυσικά αυτό προϋποθέτει συμβιβασμούς, και ο στόχος ήταν να βρεθεί η πιο ανώδυνη συνδυασμό της γενικής υπόθεση.
Χαρακτηριστικά
Όλα τα μοντέλα που παρέχονται είναι αφηρημένα, δηλαδή ΕΠΑ-Django δεν αποθηκεύει οποιαδήποτε πληροφορία στο δικό πίνακες του. Αντ 'αυτού, παρέχει μια βάση για τα δικά σας μοντέλα που θα έχουν τη στήριξη της ΕΠΑ από το κουτί.
Η ΕΠΑ API περιλαμβάνει:
& Nbsp? * Δημιουργία / ενημέρωση / πρόσβασης: μοντέλο περιπτώσεις παρέχουν standart API τόσο για την «πραγματική» πεδία και ΕΠΑ χαρακτηριστικά. Η αφαίρεση, ωστόσο, δεν στέκονται στο δρόμο σας και παρέχει τα μέσα για την αντιμετώπιση της υποκείμενης πράγματα.
& Nbsp? * Ερώτημα: BaseEntityManager περιλαμβάνει ενιαία προσέγγιση στο φίλτρο () και να αποκλείσει () ερώτημα για «πραγματική» και ΕΠΑ χαρακτηριστικά.
& Nbsp? * Προσαρμόσιμα σχήματα για τα χαρακτηριστικά.
& Nbsp? * Διαχειριστής: όλες οι δυναμικές ιδιότητες μπορούν να εκπροσωπούνται και να τροποποιηθεί στο διαχειριστή Django χωρίς ή με λίγη προσπάθεια (χρησιμοποιώντας eav.admin.BaseEntityAdmin). Σχήματα μπορούν να επεξεργαστούν ξεχωριστά, ως απλοί Django αντικείμενα μοντέλο.
& Nbsp? * Όψεις: αναζήτηση πτυχή είναι ένα σημαντικό χαρακτηριστικό του σε απευθείας σύνδεση καταστήματα, κατάλογοι, κ.λπ. Βασικά, θα χρειαστείτε ένα έντυπο που αντιπροσωπεύει ένα συγκεκριμένο υποσύνολο του μοντέλου αποδίδει με τις κατάλληλες widgets και επιλογές, έτσι ώστε ο χρήστης μπορεί να επιλέξει επιθυμητές τιμές ορισμένων ακινήτων, υποβάλλει η μορφή και να πάρετε μια λίστα με στοιχεία που να ταιριάζουν. Στην γενική περίπτωση Django-φίλτρο θα κάνει, αλλά αυτό δεν θα συνεργαστεί με την ΕΠΑ, έτσι ΕΠΑ-Django παρέχει ένα πλήρες σετ εργαλείων για αυτό.
Παραδείγματα
Ας ορίσουμε ένα μοντέλο φιλικό προς την ΕΠΑ, να δημιουργήσει ένα χαρακτηριστικό ΕΠΑ και να δούμε πώς συμπεριφέρεται. Με τον όρο "ΕΠΑ χαρακτηριστικά" εννοώ αυτά που είναι αποθηκευμένα στη βάση δεδομένων ως ξεχωριστά αντικείμενα αλλά η πρόσβαση και η αναζήτηση με τέτοιο τρόπο, σαν να ήταν στήλες στον πίνακα της οντότητας:
από django.db μοντέλα εισαγωγής
από eav.models BaseEntity εισαγωγής, BaseSchema, BaseAttribute
Οι καρποί της κατηγορίας (BaseEntity):
& Nbsp? Title = models.CharField (MAX_LENGTH = 50)
κατηγορία Schema (BaseSchema):
& Nbsp? Πέρασμα
κατηγορία Attr (BaseAttribute):
& Nbsp? Σχήμα = models.ForeignKey (Schema, related_name = 'attrs »)
# Στην Python κέλυφος:
# Ορίζουν χαρακτηριστικό που ονομάζεται "χρώμα"
>>> Color = Schema.objects.create (
... Title = "Χρώμα",
... Name = "χρώμα", # παραλείψετε να συμπληρώσετε / slugify από τον τίτλο
... Datatype = Schema.TYPE_TEXT
...)
# Δημιουργήσει μια οντότητα
>>> E = Fruit.objects.create (title = 'μήλο', το χρώμα = «πράσινων»)
# Οριστεί η "πραγματική" και ΕΠΑ αποδίδει τον ίδιο τρόπο
>>> E.title
«Μήλο»
>>> E.colour
«Πράσινες»
>>> E.save () # ασχολείται με την ΕΠΑ αποδίδει αυτόματα
# Λίστα χαρακτηριστικά ΕΠΑ ως Attr περιπτώσεις
>>> E.attrs.all ()
[]
# Αναζήτησης από ένα χαρακτηριστικό ΕΠΑ σαν να ήταν ένα συνηθισμένο πεδίο
>>> Fruit.objects.filter (color = "κίτρινο")
[<Φρούτα: μήλο>]
# Όλες οι αναζητήσεις ένωση που υποστηρίζονται
>>> Fruit.objects.filter (colour__contains = 'φωνάζουν')
[<Φρούτα: μήλο>]
Σημειώστε ότι μπορούμε να έχουμε πρόσβαση, να τροποποιήσετε και χρώμα απορία, σαν να ήταν ένα πραγματικό πεδίο οντότητας, αλλά την ίδια στιγμή το όνομά του, τον τύπο και ακόμη και την ύπαρξή καθορίζονται εξ ολοκλήρου από ένα παράδειγμα Schema. Ένα αντικείμενο σχήματος μπορεί να γίνει κατανοητή ως τάξη, και που σχετίζονται με αντικείμενα Attr οι περιπτώσεις του. Με άλλα λόγια, αντικειμένων σχήματος είναι σαν CharField, IntegerField και τέτοια, ορίζεται μόνο σε επίπεδο δεδομένων, δεν είναι δύσκολο-κωδικοποιημένα σε Python. Και μπορούν να «τεκμηριώθηκε» για οιαδήποτε οντότητα (εκτός και αν βάλετε έθιμο περιορισμούς, οι οποίοι βρίσκονται εκτός της ζώνης του ΕΠΑ-Django ευθύνης).
Τα ονόματα των γνωρισμάτων που ορίζονται στο σχετικό σχήματα. Αυτό μπορεί να οδηγήσει σε φόβους ότι μια φορά το όνομα έχει αλλάξει, ο κώδικας πρόκειται να σπάσει. Στην πραγματικότητα αυτό δεν είναι η περίπτωση, όπως τα ονόματα χρησιμοποιούνται μόνο άμεσα για χειροκίνητη αναζητήσεις. Σε όλες τις άλλες περιπτώσεις, οι αναζητήσεις κατασκευαστεί χωρίς σκληρό-κωδικοποιημένες ονόματα, και τα αντικείμενα ΕΠΑ αλληλένδετες με πρωτεύοντα κλειδιά, όχι από τα ονόματα. Τα ονόματα υπάρχουν όταν μορφές, αλλά οι μορφές παράγονται ανάλογα με την τρέχουσα κατάσταση των μεταδεδομένων, ώστε να μπορείτε να μετονομάσετε την ασφάλεια σχήματα. Τι μπορείτε να σπάσει από το περιβάλλον του διαχειριστή είναι οι τύποι. Εάν αλλάξετε τον τύπο δεδομένων ενός σχήματος, όλα τα χαρακτηριστικά της θα παραμείνει το ίδιο, αλλά θα χρησιμοποιήσετε μια άλλη στήλη για να αποθηκεύσετε τις τιμές τους. Όταν επαναφέρετε τον τύπο δεδομένων, προηγουμένως αποθηκευμένες τιμές είναι και πάλι ορατή.
Βλέπε δοκιμασίες για περισσότερα παραδείγματα.
Οι τύποι δεδομένων
Δομή μεταδεδομένα επεκτείνει περαιτέρω την ευελιξία, αλλά συνεπάγεται συμβιβασμούς. Ένας από αυτούς είναι αυξημένος αριθμός συνενώσεων (και, ως εκ τούτου, πιο αργή ερωτήματα). Ένας άλλος λόγος είναι λιγότερες τύπους δεδομένων. Θεωρητικά, μπορούμε να υποστηρίξουμε όλους τους τύπους των δεδομένων που διατίθενται για την αποθήκευση, αλλά στην πράξη αυτό θα σήμαινε τη δημιουργία πολλών στήλες ανά χαρακτηριστικό με μερικά μόνο που χρησιμοποιείται - ακριβώς αυτό που προσπαθούσαμε να αποφευχθεί με τη χρήση ΕΠΑ. Αυτός είναι ο λόγος ΕΠΑ-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 για πολλαπλές επιλογές (π.χ. κατάλογοι των τιμών).
Όλα τα χαρακτηριστικά ΕΠΑ αποθηκεύονται ως αρχεία σε έναν πίνακα με μοναδικούς συνδυασμούς αναφορές σε πρόσωπα και σχήματα. (Οντότητα παραπέμπεται μέσω του πλαισίου contenttypes, σχήμα αναφέρεται μέσω της ξένο κλειδί.) Με άλλα λόγια, μπορεί να υπάρχει μόνο ένα χαρακτηριστικό με δεδομένη οντότητα και σχήμα. Το σχήμα είναι ο ορισμός του χαρακτηριστικού. Το σχήμα καθορίζει το όνομα, τον τίτλο, τον τύπο δεδομένων και μια σειρά από άλλες ιδιότητες που ισχύουν για κάθε χαρακτηριστικό αυτού του σχήματος. Όταν έχουμε πρόσβαση ή αναζήτηση ιδιότητες ΕΠΑ, η μηχανή χρησιμοποιεί πάντα ΕΠΑ σχήματα όπως χαρακτηριστικά μεταδεδομένων. Γιατί; Επειδή το όνομα του χαρακτηριστικού αποθηκεύεται σε συναφείς σχήματος, και η τιμή αποθηκεύεται σε μία στήλη του πίνακα ιδιοτήτων. Δεν ξέρουμε ποια στήλη είναι μέχρι να δούμε τα μεταδεδομένα.
Στο παράδειγμα που παρέχεται παραπάνω έχουμε παίξει μόνο με ένα χαρακτηριστικό κείμενο. Όλοι οι άλλοι τύποι συμπεριφέρονται ακριβώς το ίδιο εκτός TYPE_MANY. Τα πολλά-προς-πολλά είναι μια ειδική περίπτωση, δεδομένου ότι περιλαμβάνει ένα επιπλέον μοντέλο για τις επιλογές. ΕΠΑ-Django παρέχει ένα αφηρημένο μοντέλο, αλλά απαιτεί από εσάς να καθοριστεί ένα συγκεκριμένο πρότυπο (π.χ. Choice), και το σημείο σε αυτό από το μοντέλο χαρακτηριστικό (δηλαδή τεθεί ξένο κλειδί που ονομάζεται "επιλογή"). Η επιλογή του μοντέλου θα πρέπει, επίσης, να επισημάνω στο Σχήμα. Ελέγξτε τις δοκιμές για παράδειγμα

Τι είναι καινούργιο σε αυτή την έκδοση:.

  • Δημιουργία / ενημέρωση / πρόσβαση σε κρούσματα μοντέλο παρέχει standart API τόσο για & quot? πραγματικός & quot? πεδία και χαρακτηριστικά ΕΠΑ. Η αφαίρεση, ωστόσο, δεν στέκονται στο δρόμο σας και παρέχει τα μέσα για την αντιμετώπιση της υποκείμενης πράγματα.
  • Ερώτημα: BaseEntityManager περιλαμβάνει ενιαία προσέγγιση στο φίλτρο () και να αποκλείσει () ερώτημα & quot? Πραγματικός & quot? και ΕΠΑ χαρακτηριστικά.
  • Προσαρμόσιμα σχήματα για τα χαρακτηριστικά.
  • Διαχειριστής: όλες οι δυναμικές ιδιότητες μπορούν να εκπροσωπούνται και να τροποποιηθεί στο διαχειριστή Django χωρίς ή με λίγη προσπάθεια (χρησιμοποιώντας eav.admin.BaseEntityAdmin). Σχήματα μπορούν να επεξεργαστούν ξεχωριστά, ως απλοί Django αντικείμενα μοντέλο.
  • Όψεις: αναζήτηση πτυχή είναι ένα σημαντικό χαρακτηριστικό του σε απευθείας σύνδεση καταστήματα, κατάλογοι, κ.λπ. Βασικά, θα χρειαστείτε ένα έντυπο που αντιπροσωπεύει ένα συγκεκριμένο υποσύνολο του μοντέλου αποδίδει με τις κατάλληλες widgets και επιλογές, έτσι ώστε ο χρήστης μπορεί να επιλέξει επιθυμητές τιμές ορισμένων ακινήτων, υποβάλλει η μορφή και να πάρετε μια λίστα με στοιχεία που να ταιριάζουν. Στην γενική περίπτωση Django-φίλτρο θα κάνει, αλλά αυτό δεν θα συνεργαστεί με την ΕΠΑ, έτσι ΕΠΑ-Django παρέχει ένα πλήρες σετ εργαλείων για αυτό.

Απαιτήσεις :

  • Python
  • Django

Άλλο λογισμικό του προγραμματιστή Andrey Mikhaylenko

Monk
Monk

14 May 15

Timetra
Timetra

14 Apr 15

Σχόλια για EAV-Django

Τα σχόλια δεν βρέθηκε
προσθήκη σχολίου
Ενεργοποιήστε τις εικόνες!