Динамическое создание моделей Django с `type`

У меня более 20 таблиц MySQL,prm_a, prm_b... с одинаковой базовой структурой, но разными именами, и я хотел бы связать их с классами моделей Django, не написав каждый из них вручную. Итак, чувствуя себя честолюбивым, я решил попробовать свои силы в использованииtype() как класс-фабрика:

Следующие работы:

def get_model_meta_class(prm_name):
    class Meta:
        app_label = 'myapp'
    setattr(Meta, 'db_table', 'prm_%s' % prm_name)
    return Meta

prm_class_attrs = {
    'foo': models.ForeignKey(Foo),
    'val': models.FloatField(),
    'err': models.FloatField(blank=True, null=True),
    'source': models.ForeignKey(Source),
    '__module__': __name__,
}

###
prm_a_attrs = prm_class_attrs.copy()
prm_a_attrs['Meta'] = get_model_meta_class('a')
Prm_a = type('Prm_a', (models.Model,), prm_a_attrs)

prm_b_attrs = prm_class_attrs.copy()
prm_b_attrs['Meta'] = get_model_meta_class('b')
Prm_b = type('Prm_b', (models.Model,), prm_b_attrs)
###

Но если я попытаюсь сгенерировать модель классов следующим образом:

###
prms = ['a', 'b']
for prm_name in prms:
    prm_class_name = 'Prm_%s' % prm_name
    prm_class = type(prm_class_name, (models.Model,), prm_class_attrs)
    setattr(prm_class, 'Meta', get_model_meta_class(prm_name))
    globals()[prm_class_name] = prm_class
###

Я получаю любопытное исключение наtype() линия (учитывая, что__module__ на самом деле, вprm_class_attrs толковый словарь):

File ".../models.py", line 168, in <module>
    prm_class = type(prm_class_name, (models.Model,), prm_class_attrs)
  File ".../lib/python2.7/site-packages/django/db/models/base.py", line 79, in __new__
    module = attrs.pop('__module__')
KeyError: u'__module__' 

Таким образом, у меня есть два вопроса: что не так с моим вторым подходом, и является ли это даже правильным способом создания моих моделей классов?

Хорошо - благодаря @Anentropic, я вижу, что элементы в моемprm_class_attrs словарь выталкивается Python, когда он делает классы. И теперь у меня это работает, но только если я делаю это:

attrs = prm_class_attrs.copy()
attrs['Meta'] = get_model_meta_class(prm_name)
prm_class = type(prm_class_name, (models.Model,), attrs)

нет, если я установлюMeta класс как атрибут с

setattr(prm_class, 'Meta', get_model_meta_class(prm_name))

Я действительно не знаю, почему это так, но, по крайней мере, у меня это работает сейчас.

Ответы на вопрос(2)

Ваш ответ на вопрос