6
votes

Une instance de formulaire d'un modèle donne ID = Aucun Django

Je vais mal comprendre quelque chose! Si mon modèle n'est pas enregistré, il n'a pas d'identifiant qui lui est associé. Donc si j'ai quelque chose comme ça:

vues.py (insérer ou modifier les informations existantes utilise le même modelorm) xxx

j'ai aussi Une image et une utilisation upload_to pour l'imagefield. Il y a deux problèmes: l'identifiant n'est pas et je ne sais pas comment manipuler / enregistrer le instance = book afin que je reçoive réellement un identifiant. Le deuxième problème est l'emplacement que j'ai enregistré mes données à la sortie. Même si l'étiquette de modèle book.img.url a l'emplacement souhaité du livre à http: 127.0.0.1: 8000 / dossier1 / ID / , l'emplacement réel est ailleurs:

où je veux enregistrer mon image sur: xxx

id est l'ID de livre. < / P>

Qu'est-ce que j'obtiens réellement: xxx

(mais 'id' devient "aucun" car il n'existe pas!)

Mon code précédent a fonctionné. Il enregistrerait sur le bon emplacement, mais avec ce code actuel, cela ne fonctionne pas. Donc, le problème de sauvegarde ne semble pas que cela soit dû à des paramètres.py puisque cela fonctionnait précédemment.

EDIT: supprimé non-code de la zone de mise en forme du code

EDIT: J'ai découvert pourquoi je n'établissais pas au bon endroit. Comme il s'est avéré, j'ai oublié de noter quelque chose quand je couche des paramètres modifiés .PY. L'épargne à l'emplacement fonctionne maintenant! Désolé gars!

Edit: Je pense que l'ID = aucun problème n'est causé par le formulaire (). Si j'évite de le faire et que je viens d'enregistrer directement sur le modèle directement, je n'ai pas ce problème.


0 commentaires

3 Réponses :


1
votes

pour la première partie: xxx

sauvegard_book = form.save () vous permet d'utiliser sauvegard_book comme instance enregistrée de bookmodel et save_book.id est son identifiant.


1 commentaires

Merci! Ouais, j'ai essayé quelque chose comme ça. Cela crée toujours le dossier Aucun, mais cette fois, cela crée également le dossier d'identification. Par exemple, si je fais sauvegarde_book.img.save ('img', demande.files ['img']) , l'IMG sera enregistré dans / non et / 1.



4
votes

ID n'attribue que lors de sauvegarder des objets lorsque vous utilisez un champ d'identifiant automatique (par défaut). Vous pouvez enregistrer l'élément avant de manipuler une image, puis sauvegarder l'image.

Peut être que vous ne pouvez pas vous inquiéter de Nom de l'image - Becouse Django File Storages n'a aucun problème avec les mêmes noms d'image. Donc si vous enregistrez simplement fichier "image.png", puis enregistrez un autre fichier avec nom "image.png" - alors il sera enregistré comme "image_1.png" xxx


1 commentaires

Merci. J'aime la façon dont vous avez géré le problème conditionnel (je vais copier ce style, heh heh). Mais je n'obtiens toujours pas "Aucun" pour id ... Je pense que c'est peut-être lorsque le formulaire enregistre qui causait le problème de l'Aucun. J'ai retourné à mon ancien code, alors ça marche pour l'instant.



0
votes

def créer_id (instance, quelque_id = aucun): xxx pré>

def pré_save_post_recefeiver (expéditeur, instance, * args, ** kwargs): P>

if not instance.id:
    instance.id = create_id(instance)


0 commentaires