je reçois des données à partir de POST et valident via cet extrait standard:Modification de données dans un django ModelForm
entry_formset = EntryFormSet(request.POST, request.FILES, prefix='entries')
if entry_formset.is_valid():
....
Le ModelForm EntryFormSet remplace un widget champ de clé étrangère pour présenter un champ de texte. De cette façon, l'utilisateur peut entrer une clé existante (suggérée via une recherche en direct Ajax), ou entrer une nouvelle clé, qui sera ajoutée de manière transparente.
J'utilise ce bloc try-except pour tester si l'objet existe déjà, et si ce n'est pas le cas, je l'ajoute.
entity_name = request.POST['entries-0-entity']
try:
entity = Entity.objects.get(name=entity_name)
except Entity.DoesNotExist:
entity = Entity(name=entity_name)
entity.slug = slugify(entity.name)
entity.save()
Cependant, je dois maintenant obtenir ce entity
de nouveau dans le entry_formset
. Il pense que entries-0-entity
est une chaîne de caractères (c'est comme ça que c'est arrivé); comment puis-je directement accéder à cette valeur du entry_formset
et l'amener à prendre la référence d'objet à la place?
La question n'est pas claire. Où se passe le second extrait de code? Il serait probablement utile si vous avez posté plus de votre point de vue. –
Le deuxième extrait arrive directement dans le bloc 'if entry_formset.is_valid()'. –
sans rapport avec votre question, quelle est la raison de ne pas utiliser Entity.objects.get_or_create (name = entity_name)? –