我在使用Django的ModelChoiceField时遇到一些困难。
我编写了以下代码:
class BookForm(ModelForm):
publisher = forms.ModelChoiceField(queryset=Publisher.objects.all())
...
现在Book和Publisher通过这种方式相关:Book-> Library-> SubPublisher-> Publisher。所有关系都是使用ForeignKey建立的。
我的表单是这样的:
我的问题是我无法让ModelChoiceField从发布者列表中选择相关的发布者。
注意:Publisher&SubPublisher仅在库中进行过滤-并且有效,问题仅在于根据所选库的ForeignKeys设置初始值
我想念什么?
感谢进阶!
答案 0 :(得分:0)
我知道了。发布,这样对其他人会有所帮助。
像这样覆盖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