Self.instance в Django ModelForm
Что означает self.instance в конструкторе Django ModelForm и где я могу найти документацию об этом?
class MyModelForm(ModelForm):
def __init__(self, *args, **kwargs):
super(MyModelForm, self).__init__(*args, **kwargs)
if self.instance:
...
Ответы
Ответ 1
В ModelForm self.instance выводится из атрибута model
, указанного в классе Meta. Ваш self
в этом контексте, очевидно, является экземпляром вашего подкласса ModelForm, а self.instance(и будет сохранять форму без ошибок) экземпляром указанного вами класса модели, хотя вы еще этого не сделали в своем пример.
Доступ к self.instance в __init__
может не работать, хотя после вызова родительского __init__
, вероятно, будет. Кроме того, я бы не рекомендовал напрямую пытаться изменить экземпляр. Если вам интересно, посмотрите код BaseModelForm на Github. instance
также можно указать при создании новой формы с помощью аргумента instance
.
Ответ 2
Вы можете найти документацию на веб-сайте django.
https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-clean-method
Просто найдите страницу для каждой ссылки на "экземпляр", и вы должны найти то, что вам нужно.
# Load up an instance
my_poll = Poll.objects.get(id=1)
# Declare a ModelForm with the instance
my_form = PollForm(request.POST, instance=my_poll)
# save() will return the model_form.instance attr which is the same as the model passed in
my_form.save() == my_poll == my_form.instance