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

时间:2018-09-03 10:44:47

标签: django python-3.x django-forms modelchoicefield

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

我编写了以下代码:

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

现在Book和Publisher通过这种方式相关:Book-> Library-> SubPublisher-> Publisher。所有关系都是使用ForeignKey建立的。

我的表单是这样的:

  • 发布者(ModelChoiceField)
  • SubPublisher(带有自动完成窗口小部件的ModelChoiceField,可根据发布者的选择进行过滤)
  • 库(与SubPublisher相同,根据SubPublisher进行过滤)

我的问题是我无法让ModelChoiceField从发布者列表中选择相关的发布者。

注意:Publisher&SubPublisher仅在库中进行过滤-并且有效,问题仅在于根据所选库的ForeignKeys设置初始值

我想念什么?

感谢进阶!

1 个答案:

答案 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