Да, единственный способ изменить имя созданной таблицы - установить для db_table внутренний метакласс.
См. https://docs.djangoproject.com/en/dev/ref/models/options/#table-names.
Однако, с некоторой магией метаклассов, на самом деле можно делать то, что вы ищете. Этот пример просто показывает, что это возможно, так как Python - хороший язык. Это может порвать с более новыми выпусками (даже маловероятными) Django, так как ModelBase и _meta официально не документированы AFAIK. Я бы просто добавил добавление db_table вручную в ваши модели.
Создавая собственный метакласс, который создает классы модели, можно изменить атрибут db_table во внутреннем метаклассе.
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
Затем вы наследуете от ModelWithoutAppName
вместо django.db.models.Model
при создании моделей:
class YourModel(ModelWithoutAppName): # database table name will be yourmodel
foo = models.IntegerField()