Я понял это. Публикация, так что это будет полезно для других.
Переопределить ModelForm Функция init выглядит так:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if kwargs['instance']:
model_instance = kwargs['instance']
Затем используйте идентификаторы, выбранные из экземпляра модели, чтобы переопределить начальные данные полей ModelForm, вот пример из вопроса:
if hasattr(model_instance, 'library') \
and hasattr(model_instance.library, 'subpublisher_id'):
subpublisher_id = model_instance.library.subpublisher_id
self.fields['subpublisher'].initial = subpublisher_id
if hasattr(model_instance.library, 'subpublisher') \
and hasattr(model_instance.library.subpublisher, 'publisher_id'):
publisher_id = str(model_instance.library.subpublisher_id.publisher_id)
self.fields['publisher'].initial = publisher_id