2010-06-03 2 views
4

Итак, у меня есть функция, которая создает динамическую модель. Я делаю это очень похоже на AuditTrail (см. Django wiki).Использование API-интерфейсов Django для динамически созданных моделей

Пример кода здесь:

https://gist.github.com/0212845ae00891efe555

Есть ли способ, что я могу сделать динамически сгенерированный класс рассол-состоянии? В идеале, что-то не безумное monkeypatch/hack?

ответ

1

Я знаю о проблеме, когда pickle не может хранить сгенерированный или динамический класс. Я решил это, такелаж в моем динамическом типе в модули Сыроватского следующим образом:

new_class = type(name, (models.Model,), attrs) 
mod = sys.modules[new_class.__module__] 
mod.__dict__[new_class.__name__] = new_class 

Это FAR из чистого или элегантного решения, так что если кто-то может думать о более Джанго дружественного способа сделать это случается, я все уши. Однако приведенный выше код действительно работает.

0

Причина в том, что ответы на это не объясняются тем, что ответ, скорее всего, хакерский. Я не думаю, что вы можете разложить объект на Python, не зная структуру класса на принимающей стороне без какого-либо хакерского решения. Большая причина разборки не поддерживает это, вероятно, потому, что это фантастический способ введения вредоносного кода в ваше приложение.

http://www.mofeel.net/871-comp-lang-python/2898.aspx объясняет, почему динамически созданные классы не могут быть разбросаны.

В каждом случае я либо просто сериализую словарь атрибутов объекта, используя метод dict, либо просто выяснил некоторые ужасные работы. Надеюсь, вы придумаете что-то лучшее.

Удачи!

Смежные вопросы