2011-09-21 17 views
9

manage.py syncdb form appname_modelname biçimindeki modeller için db tabloları oluşturur. Nasıl tabloları yalnızca modelname biçiminde oluşturmak için manage.py yapabilirim?Django syncdb tablo için özel ad

tek yolu Evet, yaratılan tablonun adını değiştirmenin tek yolu iç Meta sınıfına db_table ayarlamaktır class Meta: db_table = u'modelname'

+0

Emin değilim ama güney bu yapabilir:

from django.db import models from django.db.models.base import ModelBase class ModelWithoutAppNameBase(ModelBase): def __new__(cls, name, bases, attrs): model = super(ModelWithoutAppNameBase, cls).__new__(cls, name, bases, attrs) model._meta.db_table = name.lower() return model class ModelWithoutAppName(models.Model): __metaclass__ = ModelWithoutAppNameBase 

Modelleri oluştururken sonra ModelWithoutAppName yerine django.db.models.Model devralır. –

+0

Bu, güneyde tablo oluşturmayla ilgili değil, aynı zamanda bunları kullanarak django için de geçerli değil. Yani evet ve hayır. Her zaman üstesinden gelmek için bazı yollar vardır, ancak güvenli ve iyi belgelenmiş yol, bildiğim kadarıyla vanilya django içindeki bir tanesidir. – JackLeo

cevap

8

eklemektir olduğunu.

Bkz. https://docs.djangoproject.com/en/dev/ref/models/options/#table-names.


Ancak, bazı meta sınıf sihirleriyle, aslında aradığınız şeyi yapmak mümkündür. Bu örnek sadece Python'un çok güzel bir dil olduğu için mümkün olduğunu göstermektir. ModelBase ve _meta resmi olarak AFAIK tarafından belgelenmediğinden, Django'nun yeni sürümleriyle (olası olmamasına rağmen) kırılabilir. Modellerinize elle db_table ekleme ile yapışırdım.

Model sınıflarını oluşturan özel bir meta sınıf oluşturarak db_table özniteliğini iç meta sınıfında değiştirmek mümkündür.

class YourModel(ModelWithoutAppName): # database table name will be yourmodel 
    foo = models.IntegerField() 
İlgili konular