Django - Comment faire pour obtenir l'auto.id lors de l'enregistrement d'un nouvel objet?

J'ai un problème dans un de mes modèles. J'upload une image, et je veux stocker l'id (pk dans la table de base de données), mais j'ai besoin de savoir à quel point Django auront accès à self.id.

models.py

class BicycleAdItemKind(MPTTModel):
    def url(self, filename):
        pdb.set_trace()

        url = "MultimediaData/HelpAdImages/ItemKind/%s/%s" % (self.id, filename)
        return url

    def item_kind_image(self):
        return '<img align="middle" src="/media/%s" height="60px" />' % self.image
    item_kind_image.allow_tags = True     

    # Bicicleta completa, Componentes para bicicleta, Acessorios para ciclista
    n_item_kind      = models.CharField(max_length=50) 
    parent           = TreeForeignKey('self', null=True,
                                      blank=True, related_name='children')
    description      = models.TextField(null=True, blank=True)
    image            = models.ImageField(upload_to=url, null=True, blank=True)
    date_inserted    = models.DateTimeField(auto_now_add=True)
    date_last_update = models.DateTimeField(auto_now=True)

    def __unicode__(self):
        return self.n_item_kind

    class MPTTMeta:
        order_insertion_by = ['n_item_kind']

Le problème est dans la url() méthode; je ne peux faire self.id lors de la mise à jour d'un objet, je n'ai pas l' self.id lors de la création d'un nouvel objet. Comment puis-je modifier ce modèle, afin que je reçois self.id lors de la création d'un nouvel objet?

Avec le code actuel, lorsque je crée un nouvel objet je vais finir avec une url du genre:

MultimediaData/HelpAdImages/ItemKind/None/somefile.jpg

Et j'ai besoin d'avoir quelque chose comme:

MultimediaData/HelpAdImages/ItemKind/35/somefile.jpg

Toute indices?

  • Pouvez-vous indiquer où le 'url()' fonction est utilisée?
  • Il est utilisé dans le domaine de l'image, de l'image " = modèles.ImageField(upload_to=url, null=True, vide=True)". Lorsque l'image est téléchargée la méthode est activé.
InformationsquelleAutor André | 2013-01-09