Redefine html properties in widget

40 views
Skip to first unread message

Denis Makarov

unread,
Mar 31, 2016, 11:47:34 AM3/31/16
to Django users
Hello!

I have my own ModelForm with widgets in Meta class.

class Meta:

 model
= Foods

 fields
= '__all__'

 widgets
= {

 
'quantity': NumberInput(attrs={'min': 1, 'max': 10, 'name': "quantity2"}),

 
'comment': TextInput(),

 
}


My quantity field have NumberInput as standard.

I want to redefine html properties such name and min value.

But when I did this (code above), my fiend quantity have old values (name and min value). Max value correct.

<p><label for="id_quantity">Quantity:</label> <input id="id_quantity" max="10" min="0" name="quantity" type="number" value="1" /></p>

Django (1.9.4)

What's wrong?

Tim Graham

unread,
Mar 31, 2016, 12:24:06 PM3/31/16
to Django users
Some attributes such as IntegerField.min_value need to be customized on the field rather than the widget. This will ensure that validation is also done server-side. (see https://github.com/django/django/blob/f3595b25496691966d4ff858a3b395735ad85a6e/django/forms/fields.py#L278-L285 for example)

Denis Makarov

unread,
Apr 1, 2016, 4:46:42 AM4/1/16
to Django users
On the server-side I use validators for controlling valid values.

But if I use TextInput, such:

'quantity': TextInput(attrs={'min': 1}),

It works fine in html source code.

Full source code you can find below:




class Foods(models.Model):




        def __str__(self):


                return self.name




        name = models.CharField(max_length=200)


        quantity = models.PositiveSmallIntegerField(default=1, validators=[


        MinValueValidator(1)])


        quandesc = models.CharField(max_length=3, choices=(('Item', 'Qty'),


        ('Kilo', 'Kg.'), ('Litr', 'L.')), default='Item')


        comment = models.TextField(blank=True)


        to_ods = models.BooleanField(default=False)


        to_email = models.BooleanField(default=False)


        foodlist = models.ManyToManyField('FoodList')


class FoodForm(ModelForm):




        class Meta:


                model = Foods


                fields = '__all__'


                widgets = {


                        'quantity': NumberInput(attrs={'min': 1}),


                        'comment': TextInput(),


                }


Can you write me simple example how I must use min. value for html form?

четверг, 31 марта 2016 г., 19:24:06 UTC+3 пользователь Tim Graham написал:

Denis Makarov

unread,
Apr 1, 2016, 4:47:33 AM4/1/16
to Django users
class Foods(models.Model):

 


 

 
def __str__(self):

 
return self.name


 

 name
= models.CharField(max_length=200)

 quantity
= models.PositiveSmallIntegerField(default=1, validators=[

 
MinValueValidator(1)])

 quandesc
= models.CharField(max_length=3, choices=(('Item', 'Qty'),

 
('Kilo', 'Kg.'), ('Litr', 'L.')), default='Item')

 comment
= models.TextField(blank=True)

 to_ods
= models.BooleanField(default=False)

 to_email
= models.BooleanField(default=False)

 foodlist
= models.ManyToManyField('FoodList')




пятница, 1 апреля 2016 г., 11:46:42 UTC+3 пользователь Denis Makarov написал:

Denis Makarov

unread,
Apr 1, 2016, 4:48:09 AM4/1/16
to Django users
class FoodForm(ModelForm):

 


 

 
class Meta:

 model
= Foods

 fields
= '__all__'

 widgets
= {

 
'quantity': NumberInput(attrs={'min': 1}),

 
'comment': TextInput(),

 
}



пятница, 1 апреля 2016 г., 11:47:33 UTC+3 пользователь Denis Makarov написал:
Reply all
Reply to author
Forward
0 new messages