2017-09-02 3 views
-1
I have two models: 
class RateCard(models.Model): 
    name = models.CharField() 
    pricing_type = models.ForeignKey(PriceAttribute) 

and 

class RateCardHistory(models.Model): 
    name = models.CharField() 
    pricing_type = models.ForeignKey(PriceAttribute) 

ce que je veux est sur toutes les opérations en Ratecard un nouveau record devrait obtenir insert RateCardHistoryQuelle est la meilleure façon d'insérer un enregistrement dans le journal/table d'historique dans django

Laquelle sera la meilleure façon d'y parvenir Django signale post_save ou over sur la méthode d'enregistrement RateCard ou y at-il une autre approche qui sera bonne.

+0

En utilisant la méthode d'enregistrement est plus explicite et plus facile à comprendre. Si vous n'avez pas une bonne raison d'utiliser des signaux, il est préférable de rester simple. –

+0

Merci @ HåkenLid si vous partagez un lien/référence qui me sera très utile – Brijesh

+0

Comment puis-je initier ou appeler RateCardHistory Model dans RateCard enregistrer méthode pour passer les valeurs RateCard dans RateCardHistory – Brijesh

Répondre

0

Vous pouvez ovveride la méthode de sauvegarde dans RateCard

class RateCard(models.Model): 
    name = models.CharField() 
    pricing_type = models.ForeignKey(PriceAttribute) 

    def save(self, *args, **kwargs): 
     # the call to the super save the record as usual 
     super(RateCard,self).save(*args,**kwargs) 
     # do here what you want... create your new related records 
     new_card_history = RateCardHistory.objects.create(name='the name', pricing_type=self) 

Je vous suggère de faire quelques changements à votre code. Ajouter un datetime création si vous voulez obtenir les champs dans l'ordre par la création, et aussi un nom associé pour obtenir les histoires de RateCard

class RateCardHistory(models.Model): 
    name = models.CharField() 
    created = models.DateTimeField(auto_now_add=True) 
    pricing_type = models.ForeignKey(PriceAttribute, related_name='histories') 
+0

Merci @karim, je l'ai fait que je lance le RateCardHistory et en passant les valeurs de champ comme dictionnaire new_card_history = RateCardHistory (** data_dict), mais la chose est-il pas enregistré .. J'ai essayé new_card_history.save() – Brijesh