Je voudrais créer des étiquettes dynamiques pour un formulaire.Modelchoicefield et je me demande comment faire cela. J'ai la classe de formulaire suivante: Les étiquettes par défaut sont définies par la fonction Je pensais que je pouvais simplement remplacer le modèleChoicefield tel que décrit dans la documentation Django. Mais cela crée des étiquettes statiques. Il vous permet de définir n'importe quelle étiquette, mais une fois que le choix est effectué, ce choix est corrigé. P> Donc, je pense que je dois adapter quelque chose à init fort> comme: P> Quelqu'un ayant une idée de la façon de gérer cela? Toute aide serait très appréciée. P> J'ai trouvé quelque chose mais je ne sais pas si c'est la meilleure solution. J'ajoute quelque chose à la partie forte> init forte> de formes de classe comme suit: p>
3 Réponses :
Vous pouvez utiliser un ModelChoicefield Code>, puis modifiez les choix en vous
ProfileForm .__ init __ code> de manière dynamique, par exemple (en supposant qu'il s'agit déjà d'un modèle de modèle):
H.Name code> Dans cet exemple sera utilisé comme étiquette du choix! p> p>
Lorsque j'essaie votre solution, j'arrête d'avoir une erreur: "Sélectionnez un choix valide. Ce choix n'est pas l'un des choix disponibles." J'ai bien peur que votre solution ne fonctionne pas. Fondamentalement, le profil de modèle a défini un horoscope à clé étranger et une instance de profil s'attend à une instance de l'horoscope modèle, pas seulement un entier H.PK.
Oui, je voulais dire "les étiquettes par défaut sont définies dans la fonction Unicode spécifiée dans la définition d'horoscope"
Désolé, je me suis heurté à quelque chose ici, cela fonctionnerait probablement avec un champ de choix normal, mais voyez mon autre solution avec sous-classement le modèleChoicefield!
Vous pouvez créer votre propre classe de champ de formulaire et écraser la méthode qui génère l'étiquette: Utilisez-le sous votre forme identique que vous l'avez fait avec le modèleChoicefield: P> horoscope = MyChoiceField(queryset = .....)
Oui et c'est aussi ce que j'ai écrit dans ma question initiale. Cela crée des étiquettes alternatives mais des étiquettes statiques. Voir ma remarque qui se lit "Tout d'abord, je pensais pouvoir simplement remplacer le modèleChoicefield comme décrit dans la documentation de Django ..."
En réalité, le dernier exemple de code contient des erreurs d'un devoir:
# this function is added def get_label(obj): return '%s: Euro %.2f' % (HoroscopeLanguage.objects.get(horoscope=obj, language__language_code=language_code).horoscope_type_language, obj.price) . . . self.fields['horoscope'].label_from_instance = get_labels
Voulez-vous dire "les étiquettes par défaut sont définies dans la fonction
unicode code> spécifiée dans la définition horoscope i>"?