KeyError: '__module__' при создании динамически проксируемых моделей
Я хочу создавать динамически прокси-модели с помощью следующего кода:
from django.db import models
class BaseId(models.Model):
def __str__(self):
return self.nom
class Meta:
app_label = 'sae'
abstract = True
NOMENCL_LIST = ['CAT', 'CATR', 'CCR', 'ESPIC', 'GRP', 'MFT', 'NAT', 'PERSO', 'STJ', 'STJR']
class Nomenclature(BaseId):
code = models.CharField(max_length=20, unique=True)
nom = models.CharField( max_length=250)
class Valeurs_nomenclature(BaseId):
nomenclature = models.ForeignKey(Nomenclature, on_delete=models.PROTECT, related_name='valeurs')
code = models.CharField(max_length=20)
nom = models.CharField(max_length=250)
class NomenclatureManager(models.Manager):
def get_queryset(self):
qs = super().get_queryset()
return qs.filter(nomenclature__code=qs.model.__name__)
for nomencl in NOMENCL_LIST:
if nomencl not in globals():
meta = type('Meta', (BaseId.Meta,), { 'proxy':True })
model = type(nomencl, (Valeurs_nomenclature,), # this line causes the error
{ 'Meta':meta, 'objects':NomenclatureManager })
globals()[nomencl] = model
Этот код вызывает ошибку KeyError
перед последней строкой:
module = attrs.pop("__module__")
KeyError: '__module__'
Когда я задаю явно "module", он работает :
model = type(nomencl, (Valeurs_nomenclature,),
{ 'Meta':meta, 'objects':NomenclatureManager, '__module__':'sae.models.id_models' })
Мой вопрос: при каких обстоятельствах 'module' устанавливается неявно или нет?