Maison  >  Questions et réponses  >  le corps du texte

python - django中外键和多对多表单传入值,取值操作怎么做?

对于别的类型的表单数据我使用的是cleaned_data['列名']取得传入值,对于ChoiceFieldMultipleChoiceField的传入值取值应当怎么取?如果用cleaned_data['列名']方式取值分别会得到什么样的数据结构?

PHP中文网PHP中文网2741 Il y a quelques jours515

répondre à tous(1)je répondrai

  • 怪我咯

    怪我咯2017-04-18 09:27:35

    Nous pouvons le tester en utilisant le code :
    modèle :

    class TestModel(models.Model):
    
        TYPE_CHOICE = (
            ('1', 'a'),
            ('2', 'b'),
            ('3', 'c')
        )
    
        name = models.CharField(max_length=5)
        type_choice = models.CharField(max_length=20, choices=TYPE_CHOICE)
    
        def __unicode__(self):
            return self.name
    

    À titre de test, nous insérons trois lignes de données dans le tableau :

    id|name|type_choice
    1|aa|a
    2|bb|b
    3|cc|c
    

    formulaire :

    class IndexForm(forms.ModelForm):
        TYPE_CHOICE = (
            ('1', 'a'),
            ('2', 'b'),
            ('3', 'c')
        )
    
        test_choice_type = forms.ModelChoiceField(queryset=TestModel.objects.filter(id__lte=2))
        test_multiple_choice_type = forms.ModelMultipleChoiceField(queryset=TestModel.objects.filter(id__lte=2))
    
        class Meta:
            model = TestModel
            fields = ('name', 'type_choice')
    

    Dans le formulaire ci-dessus, nous avons créé ModelChoiceField et ModelMutipleChoiceField Dans le jeu de requêtes, nous interrogeons les objets dont l'identifiant est inférieur ou égal à 2.

    vue :

    class IndexView(FormView):
        template_name = 'index.html'
        form_class = IndexForm
    
        def form_valid(self, form):
            name = form.cleaned_data['name']
            type_choice = form.cleaned_data['type_choice']
            test_choice_type = form.cleaned_data['test_choice_type']
            test_multiple_choice_type = form.cleaned_data['test_multiple_choice_type']
    
            print type(name), name
            print type(type_choice), type_choice
            print type(test_choice_type), test_choice_type
            print type(test_multiple_choice_type), test_multiple_choice_type
    
            return super(IndexView, self).form_valid(form)
    

    Modèle :

    <form action="" method="post">
        {% csrf_token %}
        {{ form|as_bootstrap }}
        <button type="submit">提交</button>
    </form>
    

    Nous remplissons le formulaire comme suit.

    Le résultat de sortie est :

    <type 'unicode'> test
    <type 'unicode'> 1
    <class 'testdjango.hei.models.TestModel'> 1
    <class 'django.db.models.query.QuerySet'> [<TestModel: 1>, <TestModel: 2>]
    

    Cela peut être vu de ceci :
    ModelChoiceField renvoie la valeur via cleaning_data à l'instance du modèle correspondant à l'ensemble de requêtes correspondant.
    ModelMultipleChoiceField renvoie une liste d'instances du modèle correspondant à l'ensemble de requêtes correspondant via cleaning_data.
    D'autres formulaires utilisent la valeur de retour cleaning_data pour définir le type de leurs champs.
    La documentation de Django est très claire, vous pouvez la lire attentivement.

    répondre
    0
  • Annulerrépondre