J'ai ce que je pense devoir être un simple problème. J'ai un formulaire de modèle inline, et j'aimerais faire un champ Sélectionner une valeur sélectionnée par défaut de l'utilisateur actuellement connecté. Dans la vue, j'utilise l'authentification middleware d'authentification de Django, de sorte que l'utilisateur soit une simple question d'accéder à Ce que je n'ai pas pu comprendre, cependant, est de savoir comment définir cet utilisateur comme valeur sélectionnée par défaut dans une zone Select (Modelchoicefield) contenant une liste des utilisateurs. Est-ce que quelqu'un peut m'aider avec ça? p> request.User code>. p>
3 Réponses :
Je ne sais pas comment gérer cela dans des formats inline, mais l'approche suivante fonctionnera pour des formes normales et des modelforms:
Vous ne pouvez pas définir cela dans le cadre de la définition de modèle, mais vous pouvez la définir pendant L'initialisation du formulaire: p>
Je ne sais pas comment cela fonctionnerait avec le format inline. J'utilise InlineFormeSe_Factory pour créer mon format et le transmettre la classe de formulaire, pas une instance. Donc, je ne suis pas directement instanciant d'un objet de forme n'importe où et je ne sais pas comment je le transmettre ce paramètre constructeur.
Hmmm ... je crois que les modeloforms prendront la valeur "par défaut", n'est-ce pas? Et les champs de formulaire standard utilisent la première fois que vous montrez, mais aussi loin que je sais, il n'y a aucune raison d'aller super () dessus.
C'est bien! Je cherchais un moyen d'envoyer des données du formulaire à la vue afin que je puisse envoyer un statut qui sera affiché à l'aide du cadre de messages. Dans la forme, j'ai utilisé le mot-clé initial, puis dans la vue, je l'ai fait sur valider: cur_key_status = form.cleaned_data ['key_status'] Messages.Success (demande, cur_key_status)
Cela fait l'affaire. Il fonctionne en définissant les valeurs initiales de tous les formulaires "supplémentaires".
formset = MyFormset(instance=myinstance) user = request.user for form in formset.forms: if 'user' not in form.initial: form.initial['user'] = user.pk
J'utilise l'idée de Rune Kaagaard ci-dessus, sauf que j'ai remarqué que les farsets fournissent une propriété extra_forms: django.forms.formsets code donc, collant avec l'exemple ci-dessus: p> Enregistre avoir à tester les formulaires initiaux, il suffit de fournir des formulaires supplémentaires pour des formulaires supplémentaires. P> P>