2015-02-25 4 views
0

Я создал собственное поле, которое в основном «обновлено» ForeignKey. Однако я забыл установить on_delete=models.PROTECT по умолчанию (желаемое поведение по умолчанию этого поля).Как сделать миграции Django об изменениях внутри настраиваемого поля?

class MyReferenceField(models.ForeignKey): 
    def __init__(self, *args, **kwargs): 
     my_args = { 
      'null': True, 
      'blank': True, 
      'to': Photo, 
      #'on_delete': models.PROTECT, #forgotten property, that I'm adding to the field 
     } 
     my_args.update(kwargs) 
     super(MyReferenceField, self).__init__(**my_args) 

    ... MORE STUFF ... 

Ничего не изменится, если добавить к on_deletekwargs. Если я добавлю on_delete к вызову конструктора (т. Е. Вручную при каждом использовании поля), то он будет работать.

Я хочу обновить каждое использование/экземпляр этого поля, чтобы установить on_delete на PROTECT. Итак, как я могу сообщить Django об изменении поведения/свойств по умолчанию в поле?

Редактировать - уточнения: Я использую собственные миграции с Django 1.7. Я нашел deconstruct(), но я не знаю, как именно следует использовать его для этого случая.

ответ

0

В зависимости от того, используете ли вы родные миграции, как Django 1.7 или South, вам, вероятно, необходимо добавить либо deconstruct() -метод в свое настраиваемое поле, либо south_field_triple.

+0

Я нашел деконструкцию. Как я могу точно использовать его для этого случая? Что я должен делать в этом? – kravemir