Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Доступ к функции модели при редактировании объекта модели через ModelForm [RSS Feed]

#1 Апрель 17, 2016 11:10:15

Elaphe
Зарегистрирован: 2015-02-04
Сообщения: 125
Репутация: +  5  -
Профиль   Отправить e-mail  

Доступ к функции модели при редактировании объекта модели через ModelForm

Помогите, пожалуйста, понимаю, что вопрос плевый, но ответ найти не могу.
Есть модель, содержащая некоторую функцию:

class MyModel(models.Model):
Field1 = models.CharField(max_length=20)
Field2 = models.CharField(max_length=20)
def output_field(self):
    return '%s %s' % (self.field1, self.field2)

Есть форма, которая добавляет и редактирует объект модели. При этом в форму пользователь вводит не field1 и field2 по отдельности, а вместе. Затем, уже на уровне валидации поля, это поле разбивается с помощью split и в модель добавляются два поля. Примерный код формы:

class MyForm(forms.ModelForm):
	common_field = forms.CharField (max_length = 41) 
	class Meta(object):
		model = MyModel
		fields = ('common_field')
	def clean_common_field(self):
                #создаем field1 и field2
Потом эта форма используется в CreateView и все хорошо.
Но при редактировании формы возникают проблемы - поле common_field оказывается пустым, т. е. при редактировании пользователю нужно каждый раз заполнять поле заново. Надо добавить initial и использовать там функцию output_field. Пытаюсь изменить поле так:
common_field = forms.CharField (max_length = 41, initial = instance.output_field)
Получаю ошибку:
NameError: name ‘instance’ is not defined
Как сделать так, чтобы при редактировании формы в поле common_field подставлялось значение функции output_field?

Офлайн

#2 Апрель 17, 2016 11:27:32

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Доступ к функции модели при редактировании объекта модели через ModelForm

Elaphe
Как сделать так, чтобы при редактировании формы в поле common_field подставлялось значение функции output_field?
initial передается в  __init__ формы при создании объекта. Это словарь “название поля”: значение.
В CBV для этого есть специальный метод, что-то вроде get_initial или как-то так.



Офлайн

#3 Апрель 17, 2016 19:43:51

Elaphe
Зарегистрирован: 2015-02-04
Сообщения: 125
Репутация: +  5  -
Профиль   Отправить e-mail  

Доступ к функции модели при редактировании объекта модели через ModelForm

Спасибо, добрый человек! Все оказалось довольно просто:

class MyViewUpdate(generic.edit.UpdateView):
...
def get_initial(self):
		initial = super(MyViewUpdate, self).get_initial()
		initial['common_field'] = self.object.output_field
		return initial

Офлайн

  • Начало
  • » Django
  • » Доступ к функции модели при редактировании объекта модели через ModelForm[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version