Η κληρονομικότητα σάς επιτρέπει να επαναχρησιμοποιείτε κώδικα και να δημιουργείτε πιο καθαρά μοντέλα δεδομένων. Αλλά το Django προσφέρει περισσότερους από έναν τρόπους κληρονομιάς, οπότε βεβαιωθείτε ότι γνωρίζετε τις διαφορές.

Η κληρονομικότητα μοντέλου είναι μια δυνατότητα ORM του Django που επιτρέπει στους προγραμματιστές να δημιουργούν ιεραρχικές σχέσεις μεταξύ μοντέλων βάσεων δεδομένων. Επιτρέπει την επαναχρησιμοποίηση κώδικα, την επεκτασιμότητα και μια πιο καθαρή βάση κώδικα αξιοποιώντας τις αρχές του αντικειμενοστρεφούς προγραμματισμού.

Είτε δημιουργείτε μια σύνθετη εφαρμογή Ιστού είτε εργάζεστε σε ένα μικρότερο έργο, η κληρονομικότητα μοντέλων μπορεί να προσφέρει σημαντικά οφέλη, όπως η μείωση του πλεονασμού και η διασφάλιση συνεπούς συμπεριφοράς.

Τύποι κληρονομιάς μοντέλου στο Django

Το Django προσφέρει υποστήριξη για τρεις τύπους κληρονομικότητας μοντέλων:

  1. Αφηρημένες βασικές τάξεις.
  2. Κληρονομικότητα πολλαπλών τραπεζιών.
  3. Μοντέλα μεσολάβησης.

Καθένας από αυτούς τους τύπους κληρονομικότητας μοντέλων έχει πλεονεκτήματα και θα τα χρησιμοποιήσετε για συγκεκριμένους σκοπούς.

instagram viewer

Αφηρημένες βασικές τάξεις

Οι αφηρημένες βασικές κλάσεις παρέχουν έναν τρόπο ορισμού κοινών πεδίων και μεθόδων που μπορούν να κληρονομήσουν πολλά μοντέλα. Για παράδειγμα, εάν έχετε δύο μοντέλα που μοιράζονται παρόμοια πεδία, μπορείτε να χρησιμοποιήσετε μια αφηρημένη βασική κλάση για να ορίσετε τα παρόμοια πεδία. Ρίξτε μια ματιά σε αυτό το παράδειγμα:

τάξηΠελάτης(μοντέλα. Μοντέλο):
όνομα = μοντέλα. CharField (max_length=50)
email = μοντέλα. EmailField()
client_id = μοντέλα. IntegerField()

τάξηΠωλητής(μοντέλα. Μοντέλο):
όνομα = μοντέλα. CharField (max_length=50)
email = μοντέλα. EmailField()
seller_id = μοντέλα. IntegerField()

Το παραπάνω απόσπασμα κώδικα ορίζει δύο μοντέλα Django: Πελάτης και Πωλητής. Αυτά τα μοντέλα μοιράζονται δύο κοινά πεδία, συγκεκριμένα όνομα και ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ. Για να αποτρέψετε αυτόν τον πλεονασμό, μπορείτε να δημιουργήσετε ένα ξεχωριστό μοντέλο για να κρατήσετε τα κοινά πεδία στο Πελάτης και Πωλητής μοντέλα και να το κάνουν αφηρημένο.

τάξηΠληροφορίες χρήστη(μοντέλα. Μοντέλο):
όνομα = μοντέλα. CharField (max_length=50)
email = μοντέλα. EmailField()

τάξηΜετα:
αφηρημένη = Αληθής

Το παραπάνω απόσπασμα κώδικα ορίζει ένα νέο μοντέλο και ορίζει το αφηρημένη αποδίδω σε Αληθής. Αυτό σημαίνει ότι το μοντέλο θα είναι αφηρημένο και το Django δεν θα δημιουργήσει πίνακα στη βάση δεδομένων.

Μπορείτε να ξαναγράψετε το Πελάτης και Πωλητής μοντέλα όπως αυτό:

τάξηΠελάτης(Πληροφορίες χρήστη):
client_id = μοντέλα. IntegerField()

τάξηΠωλητής(Πληροφορίες χρήστη):
seller_id = μοντέλα. IntegerField()

Στο απόσπασμα κώδικα παραπάνω, το Πελάτης και Πωλητές τα μοντέλα κληρονομούν από το Πληροφορίες χρήστη μοντέλο αντί για μοντέλα. Μοντέλο.

Μπορείτε να δείτε τα μοντέλα σας στον πίνακα διαχείρισης καταχωρώντας τα στο δικό σας admin.py αρχείο σαν αυτό:

από .μοντέλα εισαγωγή Πελάτης, Πωλητής

admin.site.register (Πελάτης)
admin.site.register (Πωλητής)

Μεταφέρετε τις λειτουργίες σας και ξεκινήστε τον διακομιστή ανάπτυξης εκτελώντας τα παρακάτω σε α γραμμή εντολών:

python management.py makemigrations \
&& python management.py μετεγκατάσταση \
Διακομιστής && python manager.py

Πλοηγηθείτε στον ιστότοπο διαχειριστή σας και συνδεθείτε με τα στοιχεία του υπερχρήστη σας. Θα πρέπει να δείτε και τα τρία πεδία για κάθε μοντέλο.

Σε αυτό το παράδειγμα, ο Django έχει δημιουργήσει έναν πίνακα για το Πελάτης και Πωλητής μοντέλα. Μπορείτε να δείτε ότι το Πληροφορίες χρήστη Το μοντέλο δεν έχει πίνακα αφού είναι αφηρημένο.

Κληρονομικότητα πολλαπλών πινάκων

Μπορείτε να χρησιμοποιήσετε την κληρονομικότητα πολλών πινάκων όταν το γονικό μοντέλο πρέπει επίσης να υπάρχει ως πίνακας στη βάση δεδομένων μαζί με το θυγατρικό μοντέλο.

Σε αντίθεση με την αφηρημένη κληρονομικότητα κλάσης βάσης, όπου το γονικό μοντέλο δεν θα είναι πίνακας στη βάση δεδομένων, η κληρονομικότητα πολλών πινάκων δημιουργεί έναν πίνακα για το γονικό μοντέλο.

Στην κληρονομικότητα πολλών πινάκων, το θυγατρικό μοντέλο κληρονομεί όλα τα πεδία και τις μεθόδους από το γονικό του μοντέλο και προσθέτει τα συγκεκριμένα πεδία του. Ξένα κλειδιά βοηθούν στην καθιέρωση του σχέση μοντέλου ανάμεσα στα μοντέλα γονέων και παιδιών.

Ακολουθεί ένα παράδειγμα κληρονομικότητας πολλών πινάκων:

τάξηΠρόσωπο(μοντέλα. Μοντέλο):
first_name = μοντέλα. CharField (max_length=100)
επώνυμο = μοντέλα. CharField (max_length=100)

defget_name(εαυτός):
ΕΠΙΣΤΡΟΦΗφά"{self.first_name}{self.last_name}"

τάξηΜετα:
αφηρημένη = Αληθής

τάξηΥπάλληλος(Πρόσωπο):
υπάλληλος_αναγνωριστικό = μοντέλα. CharField (max_length=20)
τμήμα = μοντέλα. CharField (max_length=100)
μισθός = μοντέλα. FloatField()
dob = μοντέλα. DateField()

τάξηΔιευθυντής(Υπάλληλος):
τίτλος = μοντέλα. CharField (max_length=100)

Αυτό το απόσπασμα κώδικα ορίζει τρία μοντέλα. Το πρώτο μοντέλο, που ονομάζεται Πρόσωπο, είναι αφηρημένο. Καθορίζει μόνο το όνομα και το επίθετο ενός ατόμου.

Το δεύτερο μοντέλο, που ονομάζεται Υπάλληλος, κληρονομεί τα πεδία του Πρόσωπο αλλά ορίζει πρόσθετα πεδία. ο Υπάλληλος Το μοντέλο δεν είναι αφηρημένο, επομένως θα έχει τον πίνακά του στη βάση δεδομένων.

Το τελικό μοντέλο, που ονομάζεται Διευθυντής, κληρονομεί τα πεδία του Υπάλληλος μοντέλο και προσθέτει ένα πεδίο που ονομάζεται τίτλος.

Η σχέση μεταξύ των Υπάλληλος και Διευθυντής μοντέλα ονομάζεται Κληρονομικότητα πολλαπλών πινάκων. Μεταφέρετε τα μοντέλα σας, καταχωρίστε τα admin.py, ξεκινήστε τον διακομιστή σας και μεταβείτε στον πίνακα διαχείρισης. Θα πρέπει να δείτε δύο πίνακες που δημιουργήθηκαν από τον Django.

Όταν προσπαθείτε να προσθέσετε έναν νέο διαχειριστή, θα παρατηρήσετε ότι έχει όλα τα πεδία από το Υπάλληλος μοντέλο καθώς και το δικό του προσαρμοσμένο πεδίο.

Μοντέλα μεσολάβησης

Ένα μοντέλο διακομιστή μεσολάβησης σάς βοηθά να δημιουργήσετε ένα νέο μοντέλο που εκτείνεται από ένα υπάρχον μοντέλο χωρίς να δημιουργήσετε έναν νέο πίνακα βάσης δεδομένων. Σε αυτό το είδος κληρονομιάς μοντέλου, ο διακομιστής μεσολάβησης και τα πρωτότυπα μοντέλα θα μοιράζονται τον ίδιο πίνακα. Χρησιμοποιώντας μοντέλα μεσολάβησης, μπορείτε να κάνετε πράγματα όπως η δημιουργία προσαρμοσμένων μοντέλων και η αλλαγή των προεπιλεγμένων διαχειριστών.

Μπορείτε να δημιουργήσετε ένα μοντέλο διακομιστή μεσολάβησης προσθέτοντας πληρεξούσιος=Αληθ στο Μετα τάξη. Εδώ είναι ένα παράδειγμα:

τάξηProxyModel(BaseModel):

τάξηΜετα:
πληρεξούσιος = Αληθής

Η τυπική χρήση ενός μοντέλου διακομιστή μεσολάβησης είναι κατάλληλη όταν υπάρχει ένα βασικό μοντέλο και υπάρχει ανάγκη να δημιουργηθεί μια εξειδικευμένη έκδοση του με πρόσθετη λειτουργικότητα. Ακολουθεί ένα βασικό παράδειγμα:

τάξηΘέση(μοντέλα. Μοντέλο):
τίτλος = μοντέλα. CharField (max_length=30)
συγγραφέας = μοντέλα. CharField (max_length=30)

def__str__(εαυτός):
ΕΠΙΣΤΡΟΦΗ αυτο.τίτλος

τάξηProxyPost(Θέση):

τάξηΜετα:
πληρεξούσιος = Αληθής

Αυτό το απόσπασμα κώδικα ορίζει δύο μοντέλα: Θέση και MyPost. ο Θέση Το μοντέλο ορίζει δύο πεδία για τίτλο και συγγραφέα. ο ProxyPost μοντέλο κληρονομεί από το Θέση μοντέλο.

Μεταφέρετε τα παραπάνω μοντέλα και προσθέστε μια νέα ανάρτηση στον πίνακα που δημιουργήθηκε για το Θέση μοντέλο.

Αφού προσθέσετε τη δημοσίευση, ανοίξτε το Αναρτήσεις μεσολάβησης τραπέζι. Θα πρέπει να βρείτε την ανάρτηση που προσθέσατε στο Θέση τραπέζι σε αυτό.

Οι αλλαγές που κάνετε σε αναρτήσεις στο Αναρτήσεις μεσολάβησης ο πίνακας θα επηρεάσει την αντίστοιχη ανάρτηση στο Θέση πίνακα και αντίστροφα. Αυτό αποδεικνύει ότι μοιράζονται πραγματικά το ίδιο τραπέζι.

Μπορείτε να τροποποιήσετε το str() μέθοδος του μοντέλου μεσολάβησης:

τάξηProxyPost(Θέση):

τάξηΜετα:
πληρεξούσιος = Αληθής
παραγγελία = ["τίτλος"]

def__str__(εαυτός):
ΕΠΙΣΤΡΟΦΗ αυτος.συγγραφέας

Με αυτή την τροποποίηση, α ProxyPost Η αναπαράσταση συμβολοσειράς θα είναι ο συγγραφέας της, όχι ο τίτλος. Η σειρά του μοντέλου διακομιστή μεσολάβησης θα είναι επίσης βάσει του τίτλου αντί του προεπιλεγμένου πεδίου αναγνωριστικού.

Όταν χρησιμοποιείτε μοντέλα διακομιστή μεσολάβησης, θα πρέπει να έχετε κατά νου ότι δεν μπορείτε να προσθέσετε προσαρμοσμένα πεδία στο μοντέλο διακομιστή μεσολάβησης. Η κύρια περίπτωση χρήσης των μοντέλων διακομιστή μεσολάβησης είναι όταν θέλετε ένα μοντέλο να υποστηρίζει πολλαπλές συμπεριφορές.

Τα μοντέλα διακομιστή μεσολάβησης σάς βοηθούν να αλλάξετε τη συμπεριφορά ενός υπάρχοντος μοντέλου χωρίς να τροποποιήσετε τα πεδία του ή την υποκείμενη δομή του πίνακα της βάσης δεδομένων.

Χρησιμοποιήστε το μοντέλο κληρονομιάς για επαναχρησιμοποίηση κώδικα και οργανωτική δομή

Χρησιμοποιώντας τις διαφορετικές τεχνικές κληρονομικότητας μοντέλων, μπορείτε εύκολα να δημιουργήσετε επαναχρησιμοποιήσιμο και οργανωμένο κώδικα για το έργο σας.

Η κληρονομικότητα μοντέλου αποφεύγει τον περιττό κώδικα και ενισχύει τη δυνατότητα συντήρησης και επεκτασιμότητας του κώδικά σας. Καθιστά επίσης εύκολη την πλοήγηση στον κώδικά σας, ενισχύοντας έτσι την αποτελεσματική συνεργασία μεταξύ των ομάδων ανάπτυξης.

Εκτός από την κληρονομικότητα μοντέλων, η Django προσφέρει κληρονομικότητα προτύπων, η οποία είναι ένας εξαιρετικός τρόπος διαχείρισης και οργάνωσης προτύπων για τα έργα σας.