/ / W django ma znaczenie, gdzie znajduje się deklaracja "class Meta:"? - mysql, django, macos, model, meta

W django ma znaczenie, gdzie znajduje się deklaracja "class Meta:"? - mysql, django, macos, model, meta

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 № 1

Moż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