Начальное значение поля формы Django при неудачной проверке - PullRequest
7 голосов
/ 12 марта 2010

как мне установить значение элемента поля после того, как форма была отправлена, но не прошла проверку? например,

if form.is_valid():
    form.save()
else:
    form.data['my_field'] = 'some different data'

Я действительно не хочу помещать это в представление, и предпочел бы, чтобы это было частью класса формы.

Спасибо

Ответы [ 3 ]

16 голосов
/ 12 марта 2010

Документация гласит:

Если у вас есть связанный экземпляр формы и вы хотите каким-либо образом изменить данные или если вы хотите связать несвязанный экземпляр формы с некоторыми данными, создайте другую форму экземпляр . нет способа изменить данные в экземпляре формы. После создания экземпляра формы вы должны считать его неизменным для данных независимо от того, есть ли у него данные или нет.

Я не могу поверить, что ваш код работает. Но хорошо На основании документации я бы сделал это следующим образом:

if request.method == 'POST':
    data = request.POST.copy()
    form = MyForm(data)
    if form.is_valid(): 
        form.save() 
    else: 
        data['myField'] = 'some different data'
        form = MyForm(initial=data)
6 голосов
/ 12 марта 2010

Я закончил делать

if request.method == 'POST':
    new_data = request.POST.copy()
    form = MyForm(data=new_data)
    if form.is_valid(): 
        form.save() 
    else: 
        new_data['myField'] = 'some different data'

Надеюсь, это кому-нибудь поможет

1 голос
/ 07 мая 2015

Вы можете поместить его в класс формы следующим образом:

class MyForm(forms.Form):

    MY_VALUE = 'SOMETHING'
    myfield = forms.CharField(
        initial=MY_VALUE,
        widget=forms.TextInput(attrs={'disabled': 'disabled'})

    def __init__(self, *args, **kwargs):

        # If the form has been submitted, populate the disabled field
        if 'data' in kwargs:
            data = kwargs['data'].copy()
            self.prefix = kwargs.get('prefix')
            data[self.add_prefix('myfield')] = MY_VALUE
            kwargs['data'] = data

        super(MyForm, self).__init__(*args, **kwargs) 

Как это работает, проверяет, были ли какие-либо данные переданы конструктору формы. Если он есть, он копирует его (не скопированные данные неизменны), а затем помещает начальное значение, прежде чем продолжать создание экземпляра формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...