Newbie Django Question: Devenir fou avec un formulaire pour créer et mettre à jour

StackOverflow https://stackoverflow.com/questions/611575

  •  03-07-2019
  •  | 
  •  

Question

OK Je viens de me nouer dans un noeud en essayant de créer un formulaire dans Django que je peux utiliser pour saisir des données sur un nouvel enregistrement ou pour mettre à jour un enregistrement existant.

Quelqu'un peut-il dessiner les bonnes choses que je devrais avoir dans mes formulaires, mes vues et mes URL si j'ai ce modèle? :

class Person(models.Model) :
  name = models.CharField()
  age = models.IntegerField()

Dans une autre page, je souhaite un lien vers un formulaire qui me permet de créer une nouvelle instance d’une personne OU d’éditer une instance existante.

Ce qui me rend perplexe:

  • ai-je besoin de deux lignes distinctes sur l'urls.py, une pour créer un lien vers le formulaire vierge, PAS pour passer un identifiant et une autre pour le lier lorsque je le transmets?

  • ai-je besoin de deux vues différentes, une pour recevoir le formulaire avant la sauvegarde d'une instance et une pour l'instance?

Je suis sûr que j'ai vu cela se réaliser avec un lien et une fonction dans views.py, mais je ne semble plus être en mesure de bien faire les choses. Ce qui ne semble pas fonctionner, c’est essayer d’envoyer à la fois l’URL avec l’id

  /edit/id

et sans

  /edit/ 

vers la même fonction de vue avec un argument par défaut pour id

 def edit(request,id=0) :
    blah

Alors, quelle est la bonne façon de procéder?

Salut. phil

Était-ce utile?

La solution

Configurez votre urls.py pour capturer la variable id si elle est incluse dans l'URL, puis recherchez la valeur null dans votre views.py

Votre urls.py pourrait ressembler à quelque chose comme ceci:

(r'^edit/(?P<person_id>\w+)/

Ensuite, dans votre view.py:

def edit_person(person_id=None):
    if(person_id): #show populated form
    else: # show empty form
, 'mysite.myapp.views.edit_person'),

Ensuite, dans votre view.py:

<*>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top