2 votes

South lève une erreur en essayant de changer de modèle pour django-mptt

Je viens d'installer django-mptt en utilisant PIP (ce qui signifie que j'ai la version 0.5.5), j'ai changé un modèle existant ("Comment") en sous-classe de MPTTModel, et j'ai essayé de faire une migration de schéma avec South, mais South m'a donné le message d'erreur suivant :

Le champ 'Comment.lft' n'a pas de valeur par défaut spécifiée, mais il n'est pas NULL. Puisque vous ajoutez ce champ, vous DEVEZ spécifier une valeur par défaut à utiliser pour les lignes existantes. Souhaitez-vous.. :

  1. Quittez maintenant, et ajoutez une valeur par défaut au champ dans models.py
  2. Spécifier une valeur unique à utiliser pour les colonnes existantes maintenant

Veuillez faire votre choix :

En ce fil Il semble que les développeurs suggèrent de dire à South d'utiliser "0", mais quelqu'un d'autre suggère que cela créerait un autre problème. Si quelqu'un peut m'éclairer sur ce que je fais mal ou sur la façon dont je dois réagir, je lui en serais très reconnaissant.

1voto

Ben Spatafora Points 51

Comme Victor l'a suggéré, il convient de définir "Aucun" comme valeur par défaut lorsque l'on est invité à le faire. Cependant, il peut également être nécessaire d'utiliser la méthode rebuild() sur le modèle après la migration. J'ai également envoyé un message au Google Group django-mptt-dev, et l'auteur du paquet, Craig de Stigter, a répondu ce qui suit :

Si votre migration importe les modèles réels (pas ceux de l'ORM du sud) et fait un YourModel.objects.rebuild() à la fin de la migration, elle devrait migrer correctement. La valeur réelle que vous utilisez pour les champs mptt dans l'intervalle n'a pas d'importance puisque la reconstruction() la remplacera.

Je lui ai demandé de préciser s'il disait que je pouvais spécifier "None" lorsque South me demandait de définir une valeur par défaut, puis d'aller dans un shell et d'utiliser rebuild(), et il a répondu par l'affirmative.

En tout cas, cela semble avoir fonctionné pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X