Τώρα μέσα στο foo/core/models.py έχω:
from django.db import models
class Bar(Mode):
descr = models.CharField(max_length=18)
Το πρόβλημα είναι ότι τον αντίστοιχο πίνακα στη βάση δεδομένων θα μου
τον ονομάσει core_bar, ενώ εγώ θα ήθελα foo_bar, ή ίσως foo_core_bar.
Φυσικά μπορώ να προσθέσω στο class Bar το εξής:
class Meta:
db_table = 'foo_bar'
Όμως, αυτό πρέπει να το κάνω σε κάθε μοντέλο της εφαρμογής foo.core,
και δεν θέλω, θα ήθελα κάπου να του πω μόνο μία φορά ότι δεν θα
χρησιμοποιήσει το prefix core, αλλά το prefix της αρεσκείας μου.
Γίνεται αυτό;
Προσωπικά θα κοιτούσα 2 πράγματα:
1. Μήπως θα μπορούσε να φτιαχτεί ένα BaseModel για κάθε εφαρμογή από
το οποίο όλα τα υπόλοιπα μοντέλα της εφαρμογής θα κληρονομούν, και με
κάποιο τρόπο να επανα-χρησιμοποιούν (χειροκίνητα) το db_table... πχ.
db_table = '%s_%s' % (super(db_table), cls.name.lower)... το οποίο
είναι πιο φασαρία από το πλήρως χειροκίνητο.
2. Θα έβλεπα τον κώδικα του django, πού και πώς ακριβώς συντίθεται το
τελικό db_table.. ίσως να μπορείς να κάνεις override κάτι εύκολα μέσα
στο BaseModel σου.
Μυρίζει τελειομανία. :-)
-δ
--
Dimitris Glezos
Transifex: The Multilingual Publishing Revolution
http://www.transifex.net/ -- http://www.indifex.com/
Υπάρχει ένα αρχαίο ticket με μεγάλη ζήτηση σχετικά μ'αυτό [1]. Αυτό το
καλοκαίρι κάποιος το πήρε σαν GSOC project [2] και μόλις πρίν 4 μέρες
έγινε δεκτό και θα συμπεριληφθεί στο django 1.3. Αν βιάζεσαι και
τρέχεις ήδη (ή μπορείς να αναβαθμίσεις) σε 1.2, μπορείς να κατεβάσεις
από τώρα το σχετικό branch [3].
Γ.
[1] http://code.djangoproject.com/ticket/3591
[2] http://osdir.com/ml/django-developers/2010-08/msg00160.html
[3] http://code.djangoproject.com/browser/django/branches/soc2010/app-loading