2010-05-25 6 views
2

Dans les modèles django disent que ce modèle existe dans les détails/models.pydjango synchronisation db question

class OccDetails(models.Model): 
     title = models.CharField(max_length = 255) 
     occ = models.ForeignKey(Occ) 

Donc, lorsque la synchronisation db est fait les champs suivants sont créées

et plus tard à cette de deux autres champs sont ajoutés et la synchronisation db est fait les nouveaux champs ne marche pas obtenir created.How est-ce à résoudre, ce qui est aussi auto_now = true dans le dessous

ce sont les nouveaux champs

  created_date = models.DateTimeField(auto_now_add=True) 
     modified_date = models.DateTimeField(auto_now_add=True, auto_now=True) 

Répondre

7

syncdb crée les tables de base de données pour toutes les applications dans INSTALLED_APPS dont les tables n'ont pas déjà été créées.

syncdb ne modifiera pas les tables existantes
syncdb ne fera que créer des tables pour les modèles qui ne sont pas encore installés. Il n'émettra jamais d'instructions ALTER TABLE pour faire correspondre les modifications apportées à une classe de modèle après l'installation. Les modifications apportées aux classes de modèles et aux schémas de base de données impliquent souvent une certaine forme d'ambiguïté et, dans ces cas, Django devrait deviner les changements corrects à effectuer. Il y a un risque que des données critiques soient perdues dans le processus.

vous pouvez

  • Émettre une commande ALTER TABLE manuel
  • DROP TABLE la table particulière (perdrez des données) et exécutez syncdb à nouveau
  • course django-admin sqlclear pour obtenir une liste des instructions SQL pour effacer le db entier et exécuter ces commandes (videra la DB - vous perdrez toutes les données existantes) ou

DateField.auto_now: définir automatiquement le champ à NOW() chaque fois que l'objet est enregistré. Utile pour les horodatages "last-modified". Notez que la date actuelle est toujours utilisée; ce n'est pas seulement une valeur par défaut que vous pouvez remplacer.

Ainsi, la colonne modified_date sera mis à jour automatiquement à chaque fois que vous appelez object.save()

+0

Merci ...................... – Hulk

3

Ceci est un problème commun avec Django. Comme dit par Amarghosh, syncdb ne peut pas modifier le schéma des tables existantes.

South a été créé pour résoudre ce problème.

Je le recommande.

+0

Merci ...................... – Hulk