2013-05-25 8 views
1

J'ai un nombre fixe disons qu'il est num = 1000 Maintenant, j'ai un champ qui doit être la somme de l'object.id et num. J'ai besoin de ceci dans save() quelque chose comme ci-dessous.Django Obtenir l'ID de l'objet en save()

def save(self, *args, **kwargs): 
    num = 1000 
    self.special = self.id + num 
    super(MyModel, self).save(*args, **kwargs) 

Mais self.id est connu après enregistrement et un champ nommé spécial est requis. Comment obtenir self.id?

Répondre

2

Tout d'abord? Le numéro que vous essayez d'ajouter est-il un nombre fixe? Si oui, pourquoi devez-vous le stocker dans le db? Vous pouvez créer une méthode pour votre modèle qui fonctionne comme une propriété et ajoute le numéro lorsque vous avez besoin:

class ModelX(models.Model): 
    ... 
    def special(self): 
     num = 1000 
     return self.id + num 

Si vous avez vraiment besoin de stocker ce à la DB dont vous avez besoin peut-être faire un accès à deux bases de données parce que Daniel dit, vous obtenez l'ID après que l'objet est stocké dans la DB.

Vous pouvez modifier votre méthode save à celui-ci:

def save(self, *args, **kwargs): 
    num = 1000 
    self = super(MyModel, self).save(*args, **kwargs) 
    self.special = obj.id + num 
    self.save() 

Notez que cela peut être optimisé en faisant juste ce la première fois qu'un objet est créé dans la db, où self.special est NULL ou valeur par défaut en fonction sur la façon dont vous avez déclaré votre modèle.

def save(self, *args, **kwargs): 
    num = 1000 
    self = super(MyModel, self).save(*args, **kwargs) 
    # self.special is null, (creating the object in the db for the 1st time) 
    if not self.special: # or if self.special != defaultvalue (defined in MyModel) 
     self.special = obj.id + num 
     self.save() 

J'espère que cela aide.

Questions connexes