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)
- SubPublisher(带有根据 Publisher selection 过滤的自动完成小部件的 ModelChoiceField)
- 库(同SubPublisher,根据SubPublisher过滤)
我的问题是我无法将 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
我在使用 Django 的 ModelChoiceField 时遇到了一些困难。
我写了下面的代码:
class BookForm(ModelForm):
publisher = forms.ModelChoiceField(queryset=Publisher.objects.all())
...
现在图书和出版商是这样关联的:图书 → 图书馆 → 子出版商 → 出版商。所有关系都是使用 ForeignKey 建立的。
我的表格是这样的:
- 发布者(ModelChoiceField)
- SubPublisher(带有根据 Publisher selection 过滤的自动完成小部件的 ModelChoiceField)
- 库(同SubPublisher,根据SubPublisher过滤)
我的问题是我无法将 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