Django Form, сделать поле доступным для чтения
Я пытаюсь создать форму с Django и безуспешно пытаюсь создать поле только для чтения. Поле должно содержать код, который вычисляется в представлении, но мне нужно показать его пользователю.
Это модель:
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)
Это форма:
class NewCustomerForm(forms.ModelForm):
class Meta:
model = Customer
fields = ['name', 'code', 'note']
Это должно быть довольно просто, но я столкнулся со многими проблемами. Что я уже пробовал:
- Field.disabled = True (в документации не объясняется, куда я должен поместить этот атрибут, так что, возможно, я что-то неправильно понимаю)
self.fields['code'].widget.attrs['readonly'] = True
в __init __self.fields['code'].widget.attrs['disabled'] = True
в __init __
Во всех трех методах поле остается редактируемым пользователем
Если значение поля кода не нужно в html-выводе, я бы предложил исключить поле из формы и вычислять значение в представлении, если форма валидна. Вычисленное значение можно присвоить экземпляру модели в представлении перед сохранением.
class YourView(views.CreateView):
def form_valid(self, form):
form.instance.code = your_calculated_value
return super().form_valid(form)
HTML-ввод будет всегда редактируемым пользователем, даже если вы установите readonly
или disabled
в true, пользователь может просто снять оба этих флага и ввести значение!
или readonly
, и пользователю очевидно, что поле фиксированное, а ваш код python устанавливает фиксированное значение, игнорируя ввод пользователя, все должно быть в порядке.disabled