Django ModelChoiceField 最初没有根据相关模型选择

Django ModelChoiceField is not initially selected according to related models

我在使用 Django 的 ModelChoiceField 时遇到了一些困难。

我写了下面的代码:

class BookForm(ModelForm):
    publisher = forms.ModelChoiceField(queryset=Publisher.objects.all())
    ...

现在图书和出版商是这样关联的:图书 → 图书馆 → 子出版商 → 出版商。所有关系都是使用 ForeignKey 建立的。

我的表格是这样的:

我的问题是我无法将 ModelChoiceField select 从发布者列表中删除的相关发布者。

注意:Publisher 和 SubPublisher 仅用于过滤库 - 它有效,问题仅在于根据 selected 库的 ForeignKeys 设置初始值。

我错过了什么?

我明白了。发布,以便对其他人有所帮助。

覆盖 ModelForm init 函数,如下所示:

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if kwargs['instance']:
            model_instance = kwargs['instance']

然后,使用从模型实例中获取的id来覆盖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