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']

Это должно быть довольно просто, но я столкнулся со многими проблемами. Что я уже пробовал:

  1. Field.disabled = True (в документации не объясняется, куда я должен поместить этот атрибут, так что, возможно, я что-то неправильно понимаю)
  2. self.fields['code'].widget.attrs['readonly'] = True в __init __
  3. 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

Вернуться на верх