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