Существует несколько причин использования "goto" оператора, о котором я знаю (некоторые уже говорили с этим):
Чисто выход из функции
Часто в функции, можно выделить ресурсы и потребность выйти в нескольких местах. Программисты могут упростить свой код путем помещения кода очистки ресурса в конце функции, и все "точки выхода" функции были бы goto маркировка очистки. Таким образом, Вы не должны писать код очистки в каждой "точке выхода" функции.
Выходящие вложенные циклы
, Если Вы находитесь во вложенном цикле и должны убежать весь циклы, goto может сделать этот намного более чистый и более простой, чем операторы завершения и если-проверки.
повышения производительности Низкого уровня
Это только допустимо в критическом по отношению к перфекту коде, но операторы перехода выполняются очень быстро и могут стимулировать Вас при перемещении через функцию. Это - обоюдоострый меч, однако, потому что компилятор обычно не может оптимизировать код, который содержит gotos.
Примечание, что во всех этих примерах, gotos ограничиваются объемом единственной функции.
Используйте следующий метод (надеюсь, он достаточно ясен):
class BackupForm(ModelForm):
"""Form for adding and editing backups."""
def __init__(self, *args, **kwargs):
systemid = kwargs.pop('systemid')
super(BackupForm, self).__init__(*args, **kwargs)
self.fields['units'] = forms.ModelMultipleChoiceField(
required=False,
queryset=Unit.objects.filter(system__id=systemid),
widget=forms.SelectMultiple(attrs={'title': _("Add unit")}))
class Meta:
model = Backup
exclude = ('system',)
Создайте такие формы:
form_backup = BackupForm(request.POST,
instance=Backup,
systemid=system.id)
form_backup = BackupForm(initial=form_backup_defaults,
systemid=system.id)
Надеюсь, это поможет! Дайте мне знать, если вам нужно, чтобы я объяснил более подробно.
В http://www.djangobook.com/en/2.0/chapter07/ в разделе Установка начальных значений описывается, как использовать начальный параметр
конструктора Form
. Вы также можете сделать дополнительные вещи в методе __ init __
вашей производной формы
.