Django - ModelForm中的选择列表

时间:2018-06-13 13:04:10

标签: python django

我想自定义一个modelForm,其中包含从0到10的选项列表。 我试图添加一个小部件,但无法弄清楚如何使其工作:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<div id="banner-message">
  <p>Hello World</p>
  <button>Change color</button>
</div>

给我一​​个错误:

class Abonnements(models.Model):
    id                          = models.AutoField(primary_key=True)
    nombre_d_exemplaire         = models.IntegerField(blank=True, null=True)
    numero_d_adherent           = models.IntegerField(blank=True, null=True)
    date_d_enregistrement       = models.DateTimeField(blank=False, null=False)  # This field type is a guess.
    premier_numero_a_servir     = models.FloatField(blank=True, null=True)
    remarques                   = models.TextField(blank=True, null=True)
    destinataire_facture        = models.TextField(blank=True, null=True)
    adresse_facture             = models.TextField(blank=True, null=True)
    code_postal_facture         = models.TextField(blank=True, null=True)
    ville_facture               = models.TextField(blank=True, null=True)
    personne                    = models.ForeignKey('personnes.Personnes',on_delete=models.PROTECT,)

    class Meta:
        db_table                = 'abonnements'
        ordering                = ['-date_d_enregistrement']


class  AbonnementsForm(ModelForm):

    class Meta:
        model   = Abonnements
        fields  = [ "nombre_d_exemplaire"    ]
        widgets = {'"nombre_d_exemplaire"    : forms.ChoiceField(widget=forms.RadioSelect, choices=range(10))  }

2 个答案:

答案 0 :(得分:0)

我认为是choices parameter expects a List of Tuples。它应该是这样的:

forms.ChoiceField(widget=forms.RadioSelect, choices=[(x, x) for x in range(10)])

因为我们需要传递一个&#34;值&#34;和一个&#34;键&#34;格式,第一个用作输入的值,第二个用作该值的Label。您还可以使用以下内容:

[('first', 'First'), ('second', 'Second'), ('third', 'Third')]

答案 1 :(得分:0)

如果我理解你的问题, 你可以这样做:  首先在类定义之前创建一个列表:

 options = []
 for i in range(0,11):
     options.append((i,i))

然后明确添加所需字段:

 number = forms.ChoiceField(choices=options)