I'm trying to create a Form with Django and i'm aiming to have a readonly field, without success. The field should contain a code that is calculated in the view but i need to show it to the user.
This is the Model:
class Customer(models.Model):
name = models.CharField(max_length = 250)
note = models.CharField(max_length=500,blank=True,null=True)
code = models.IntegerField(null=True,blank=True,unique=True)
This is the Form:
class NewCustomerForm(forms.ModelForm):
class Meta:
model = Customer
fields = ['name', 'code', 'note']
That should be pretty easy but i'm facing a lot of problems. What I've already tryed:
self.fields['code'].widget.attrs['readonly'] = True
in __init __ self.fields['code'].widget.attrs['disabled'] = True
in __init __ In all of three method the field remain editable by the user
If the code field value is not needed in the html output, I would suggest to exclude the field from the form and calculate the value in the view of the form is valid. You can assign the calculated value to the model instance in your view before saving.
class YourView(views.CreateView):
def form_valid(self, form):
form.instance.code = your_calculated_value
return super().form_valid(form)
The HTML input will always be editable by the user, even if you set readonly
or disabled
to true, the user can just remove both of those flags and type in a value
However, as long as the field renders as readonly
or disabled
, and it's apparent to the user that the field is fixed, and your python code sets a fixed value that ignores user input, you should be fine.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.