9
votes

Formulaires ModelChoicefield QuerySet + Champs de choix supplémentaires Django Formulaires

J'essaie de créer un formulaire dans les charges de ModelChoiceField à partir de QuerySet et je souhaite ajouter peu de valeurs personnalisées à ModelChoicefield for Extension, j'ai utilisé le champ de choix, comme ci-dessous, mais lors de la mise à jour du formulaire, obtenez une erreur de formulaire ci-dessous: Sélectionnez un choix valide. Ce choix n'est pas l'un des choix disponibles.

code: xxx

suis-je errant ici?


0 commentaires

3 Réponses :


1
votes

Avez-vous un objet personne avec pk "aucun"?

Je pense que vous devriez utiliser xxx

edit:

Puisque vous utilisez un modèleChoicefield, je pense que tous vos choix seraient soit de ce type de modèle ou aucun.

Vous pouvez "étendre" les choix de ce type en modifiant le requérant que vous transmettez dans le constructeur du champ modlechoicefield, par exemple: xxx

Cette question À propos de la modélisefield un peu et pourrait vous intéresser:

Comment filtrer les choix de fourrure à l'étranger dans un modelform Django?


1 commentaires

Nope, après avoir ajouté ELTER_LABEL = "Aucun" aussi, il ne fonctionne pas. Ma question est trop étendue le choix de QuerySet pour sélectionner l'option



18
votes

ça ne va pas fonctionner. Regardez comment un ModelChoicefield CODE> fonctionne:

class TestForm(forms.Form):
    mychoicefield = forms.ChoiceField(choices=QS_CHOICES)

    def __init__(self, *args, **kwargs):
        super(TestForm, self).__init__(*args, **kwargs)
        self.fields['mychoicefield'].choices = \
            list(self.fields['mychoicefield'].choices) + [('new stuff', 'new')]

    def clean_mychoicefield(self):
        data = self.cleaned_data.get('mychoicefield')
        if data in QS_CHOICES:
            try:
                data = MyModel.objects.get(id=data)
            except MyModel.DoesNotExist:
                raise forms.ValidationError('foo')
        return data


0 commentaires

3
votes

Il semble que vous souhaitiez simplement permettre à ces champs de formulaire d'être facultatif. Ne faites pas le dur sur vous-même. Voir La documentation concernant le marquage d'un champ de formulaire au besoin. < Pré> xxx


0 commentaires