dbtable prefix (orthi [elpizw] epanalipsi)

1 view
Skip to first unread message

Antonis Christofides

unread,
Sep 15, 2010, 10:18:37 AM9/15/10
to djan...@googlegroups.com
Έχω μια εφαρμογή, τη foo, η οποία περιλαμβάνει, ας πούμε,
υποεφαρμογές: foo.core, foo.contrib. Οπότε έχω
foo/core/models.py
foo/core/views.py
κλπ.

Τώρα μέσα στο 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 της αρεσκείας μου.
Γίνεται αυτό;

Dimitris Glezos

unread,
Sep 15, 2010, 12:32:29 PM9/15/10
to djan...@googlegroups.com
2010/9/15 Antonis Christofides <ant...@itia.ntua.gr>:

>        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/

George Sakkis

unread,
Sep 15, 2010, 4:55:58 PM9/15/10
to django-gr

Υπάρχει ένα αρχαίο 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

Reply all
Reply to author
Forward
0 new messages