2013-06-05 2 views
1

У меня есть собственный подкласс класса django для хранения моих собственных маринованных классов. Есть ли способ установить атрибут model, который указывает на модель экземпляр на моем маринованных классе при каждой загрузке из базы данных?Django Pickle Field Доступ к экземпляру модели при загрузке

До сих пор моя догадка в unpickling процессе, внутри метода to_python, но я не уверен, что если Field имеет ссылку на модель экземпляра или класса.

EDIT 1: Эталонная модель внутри метода to_python действительно ссылка на класса, не экземпляра

ответ

0

Фигурного это!

I отменяют __init__ метод в модели, как это:

class MyModel(models.Model): 
    def __init__(self, *args, **kwargs): 
     # Don't do any extra looping or anything in here because this gets called 
     # at least once for every row in each query of this table 
     self._meta.fields[2].model_instance = self 
     super(MyModel, self).__init__(*args, **kwargs) 
    field1 = models.TextField() 
    field2 = models.PickleField() 
    field3 = models.DateTimeField() 

Тогда в моем поле подкласса:

def to_python(self, value): 
    # logic and unpickling, then right before your return: 
    if hasattr(self, 'model_instance'): # avoid AttributeError if list, dict, etc. 
     value.model_instance = self.model_instance 
    return value 
Смежные вопросы