One-to-many inline select with django admin 2018 UPDATED

Обновить

April 2019

Просмотры

116 раз

1

Я столкнулся с той же проблемой , как описано здесь или здесь .

Короче говоря: у меня есть 2 модели: Bookи Shelf. В админ форме ( «добавить полки») Я хотел бы, чтобы выбрать из книг , которые уже находятся в библиотеке. По умолчанию это не доступно.

Я использовал решение (из ссылок выше) и все работает, пока я не пытаюсь «сохранить» новый объект.

Ошибка:

Несохраненная экземпляра модели (Полка: ShelfAlpha) не может быть использован в запросе ОРМ.

#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

Похоже, что в 2014 году работала, но теперь это не так.

Я был бы признателен за помощь!

0 ответы