2013-10-07 4 views
2

Quelle serait la meilleure façon de créer un champ "Historique des mises à jour" dans mon modèle Django afin de pouvoir suivre plusieurs dates de mise à jour?Dates de mise à jour multiples django dans un champ

Je peux créer un modèle avec last_updated = models.DateTimeField() et ensuite avoir ma vue enregistrer le datetime à lui, mais si je veux avoir un historique de quand l'utilisateur a mis à jour son poste, et pas seulement le plus récent enregistrer?

Faut-il plutôt utiliser ManyToManyField ou CharField?

Répondre

2

Cela ne devrait pas être un champ du tout. Au lieu de créer un modèle, qui référence votre modèle principal à l'aide d'un ForeignKey:

class YourModel(models.Model): 
    name = models.CharField(max_length=100) 

class YourModelUpdateHistory(models.Model): 
    your_model = models.ForeignKey('YourModel') 
    updated = models.DateTimeField() 

De cette façon, vous pouvez avoir plusieurs dates pour chaque modèle, tout en gardant la base de données correctement normalisée. Il vous permettra également dans le futur d'ajouter des champs supplémentaires avec d'autres informations sur chaque mise à jour (par exemple, qui a mis à jour l'objet). Vous devez créer un objet YourModelUpdateHistory chaque fois que vous mettez à jour un objet YourModel. Vous pouvez même le configurer de sorte cela se fait automatiquement, grâce à la méthode save() (ce qui est appelé par Django chaque fois que vous enregistrez un objet):

from django.utils import timezone 

class YourModel(models.Model): 
    name = models.CharField(max_length=100) 

    def save(self, *args, **kwargs): 
     super(YourModel, self).save(*args, **kwargs) 
     YourModelUpdateHistory.objects.create(your_model=self, updated=timezone.now()) 
+0

OK Je pense que je l'obtenir - chaque fois que le YourModel est enregistré, puis une nouvelle entrée dans YourModelUpdateHistory est créée avec le datetime actuel, que je peux définir dans la vue lors de l'enregistrement de la mise à jour? –

+0

J'ai mis à jour mon article, avec un exemple de création automatique de modèles YourModelUpdateHistory, chaque fois que YourModel est mis à jour. –

+0

Merci! Je vais mettre à jour ce soir quand je rentre à la maison –

Questions connexes