0

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

我写了以下代码:

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

现在 Book 和 Publisher 是这样关联的:Book → Library → SubPublisher → Publisher。所有关系都是使用 ForeignKey 建立的。

我的表格是这样的:

  • 发布者(模型选择字段)
  • SubPublisher(具有自动完成小部件的 ModelChoiceField,可根据 Publisher 选择进行过滤)
  • 库(与 SubPublisher 相同,根据 SubPublisher 过滤)

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

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

我错过了什么?

4

1 回答 1

1

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

像这样覆盖 ModelForm初始化函数:

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

然后,使用从模型实例中获取的 id(s) 来覆盖 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
于 2018-09-03T13:08:56.167 回答