Zgodnie z konwencją django umieszcza class Meta:
deklaracja druga do ostatniej w definicji klasy, tuż przed __unicode__
definicja metody. Czy to jest wymagane? Próbuję wyśledzić podstępny błąd na Lion OSX, gdzie przypadek (kapitał / niższe) db_table = u"TableName"
instrukcja jest ignorowana w przypadku niektórych modeli. W przypadku niektórych modeli manage.py syncdb
tworzy tabele mysql z lower()
ed nazw tabel i dla innych używa tego db_table
Sprawa prawidłowo. Bardziej skomplikowane modele, z niestandardowymi save()
i inne metody to te, które są konwertowanena małe litery przed utworzeniem tabel mysql. Próbuję przeprowadzić wiele zmian w kodzie, aby zobaczyć, czy to jest problem, ale nie mogę znaleźć dokumentacji właściwego porządku rzeczy, choć pamiętam w przeszłości gdzieś, że pozycja dla class Meta:
został określony.
Próbowano również literałów w standardzie unicode dla specyfikacji db_table i literałów ciągów jednobajtowych. Niether robi różnicę (dla modeli roboczych lub nieobrobionych)
Oto odpowiedni kod:
grep -A5 -B2 _table "entityorganizer / models.py"
class Meta:
db_table = "Entity"
verbose_name_plural = "entities"
ordering = ["map_status","type_name","name"]
get_latest_by = "updated"
--
class Meta:
db_table = "EntityRelationship"
ordering = ["to_entity","relationship_type"]
unique_together = (("from_entity","to_entity","relationship_type"))
get_latest_by = "updated"
verbose_name = "relationship"
--
class Meta:
db_table = "Specialty"
verbose_name_plural = u"specialties"
def __unicode__(self):
return "%s"%(self.specialty)
--
class Meta:
db_table = "ZipCode"
get_latest_by = "updated"
def get_region(self):
return REGION[region_id_v2-200][1] or 0
--
class Meta:
db_table = "Setting"
def __unicode__(self):
return "%s = %s"%(self.name, self.value) #, self.updated)
Odpowiedzi:
2 dla odpowiedzi № 1Możesz umieścić swoje class Meta
gdziekolwiek chcesz w swoich modelach, o ile pasuje do właściwego wcięcia.
1 dla odpowiedzi nr 2
Okazuje się class Meta:
pozycja była rzeczywiście czerwonym śledziem (jako @sdolanwyjaśnione). Najwyraźniej MAMP lub django przechowuje metadane dotyczące przypadku usuniętych tabel gdzieś poza tabelami. Kiedy usunęliśmy całą bazę danych i przebudowaliśmy ją db_table
sprawa została uhonorowana przez mysql i syncdb