Python django admin 2018更新的一对多内联选择

Python django admin 2018更新的一对多内联选择,python,django,django-models,django-forms,django-admin,Python,Django,Django Models,Django Forms,Django Admin,我面临的问题与描述或描述的相同 简而言之:我有两种型号:Book和Shelf。在管理表单(“添加书架”)中,我想从图书馆已有的书籍中进行选择。默认情况下,此选项不可用 我使用了解决方案(来自上面的链接),在我尝试“保存”新对象之前,一切都正常 错误: 无法在ORM查询中使用未保存的模型实例(Shelf:ShelfAlpha) 2014年的情况似乎还不错,但现在不行了 我会感谢你的帮助 #models.py class Book(models.Model): shelf = models.

我面临的问题与描述或描述的相同

简而言之:我有两种型号:
Book
Shelf
。在管理表单(“添加书架”)中,我想从图书馆已有的书籍中进行选择。默认情况下,此选项不可用

我使用了解决方案(来自上面的链接),在我尝试“保存”新对象之前,一切都正常

错误:

无法在ORM查询中使用未保存的模型实例(Shelf:ShelfAlpha)

2014年的情况似乎还不错,但现在不行了

我会感谢你的帮助

#models.py
class Book(models.Model):
    shelf = models.ForeignKey(Shelf, blank=True, null=True,
        related_name="in_shelf")

#admin.py
class ShelfForm(forms.ModelForm):
    class Meta:
        model = Shelf

    books = forms.ModelMultipleChoiceField(queryset=Book.objects.all())

    def __init__(self, *args, **kwargs):
        super(ShelfForm, self).__init__(*args, **kwargs)
        if self.instance:
            if self.instance.in_shelf:
                self.fields['books'].initial = self.instance.in_shelf.all()
            else:
                self.fields['books'].initial = []

    def save(self, *args, **kwargs):    
        instance = super(ShelfForm, self).save(commit=False)
        self.fields['books'].initial.update(shelf=None)
        self.cleaned_data['books'].update(shelf=instance)
        return instance