J'ai un petit site Web avec quelques utilisateurs et j'aimerais ajouter un champ à l'un de mes modèles (et donc des tableaux.) Le problème est que syncdb
bien sûr ne touchera pas les modèles existants et je j'essaie de comprendre comment ajouter ce champ au modèle/tableau sans avoir à repeupler le tout.
Exemple:
class Newspaper(models.Model):
name = models.CharField()
class UserProfile(models.Model):
user = models.ForeignKey(user, unique=True)
reads = models.ManyToManyField(Newspaper)
J'aimerais maintenant ajouter un champ URL (blank=True
) au modèle Newspaper
sans casser les profils utilisateur.
Des idées?
Il n'y a aucun moyen intégré de le faire. Cependant, il existe un certain nombre de projets tiers qui le feront pour vous. Les deux principaux sont appelés Sud et Django-evolution , bien qu'il y en ait également d'autres (dont celui auquel j'ai été impliqué, dmigrations).
Je recommanderais certainement South - il a un certain nombre de fonctionnalités vraiment intéressantes et fonctionne très bien.
Vous pouvez essayer d'obtenir le SQL pour votre nouveau champ en utilisant:
manage.py sql appname
Où appname
est le nom de l'application dans laquelle réside votre classe de journaux.
Ensuite, vous pouvez ajouter manuellement un champ à votre appname_newspaper
table, en utilisant ALTER TABLE
. Je ne connais pas de moyen de le faire directement avec Django, car Django ne prend pas en charge les migrations.
Réponse 2015:
Exécutez ce qui suit:
python manage.py makemigrations
python manage.py migrate