Django Data Migration, используя Юг с наследованием - PullRequest
0 голосов
/ 17 февраля 2011

Мы переносим данные в нескольких экземплярах нашего проекта Django в новую схему.

Старая схема имела:

class Group(models.Model)
class User(models.Model)

И новая схема имеет:

class AccessEntity(models.Model)
class Group(AccessEntity)
class User(AccessEntity)

Мы пытаемся использовать Юг для переноса данных для этих групп и пользователей. http://south.aeracode.org/docs/tutorial/part3.html

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

Основная проблема заключается в том, как сохранить идентификатор пользователя / группы одинаковым, если бы я создал новый объект пользователя, расширяющий класс AccessEntity.

На пользователей и группы ссылаются объекты, которыми они владеют или которым они назначены. Если я изменю их ID, эта информация будет потеряна. Есть ли способ сохранить тот же идентификатор для объекта, хотя мне нужно, чтобы он теперь расширялся от AccessEntity?

1 Ответ

2 голосов
/ 17 февраля 2011

не уверен, правильно ли я понимаю ваш вопрос, но способ наследования многотабличных моделей заключается в том, что в родительской и дочерней моделях будет неявное однозначное поле.Таким образом, и пользователь, и группа будут использовать поле идентификатора AccessEntity, если в AccessEntity есть такое поле.

Если вы создаете AccessEntity так, чтобы в нем было поле ID, вы можете назначить его при написании прямой (data) -миграции.Таким образом, вы можете быть уверены, что AccessEntity получит правильный идентификатор.

Если вы написали более длинное учебное пособие по многотабличному наследованию и похоже, что вы пытаетесь сделать что-то подобное.

И, кроме того, ответ на этот вопрос также может быть полезен (обратите внимание, что некоторые вещи в исходном ответе не будут работать в новых версиях django / south, см. Мой учебник / ответвнизу для изменений).

В вашем случае может возникнуть проблема из-за того, что если у вас уже есть данные как в User, так и в группах и поле id сгенерировано автоматически, IDs, вероятно, не будет различаться,например, у вас, скорее всего, будет пользователь и группа с ID==1.Это может быть проблемой, если вы хотите сделать запрос на основе этих IDs и, конечно, ID не может быть первичным ключом для AccessEntity тогда.

...