Администратор Django - встроенный встраивает (или, три модели, редактирующие сразу)

Мне удалось обойти проблему (похоже), но я создал три отдельных действия (требуется книга, требуется книга + требуется глава, требуется книга + требуется глава + требуется стих).

Затем мне просто нужно было дублировать мой action-endpoint, чтобы одна и та же конечная точка могла принять все три действия.

Хотя я вижу ценность «исторических данных» в некоторых случаях, похоже, должен быть способ их игнорировать.

51
задан Serjik 19 December 2015 в 00:05
поделиться

3 ответа

Вам необходимо создать пользовательскую форму и шаблон для LinkSectionInline .

Что-то вроде этого должно работать для форма:

LinkFormset = forms.modelformset_factory(Link)
class LinkSectionForm(forms.ModelForm):
    def __init__(self, **kwargs):
        super(LinkSectionForm, self).__init__(**kwargs)
        self.link_formset = LinkFormset(instance=self.instance, 
                                        data=self.data or None,
                                        prefix=self.prefix)

    def is_valid(self):
        return (super(LinkSectionForm, self).is_valid() and 
                    self.link_formset.is_valid())

    def save(self, commit=True):
        # Supporting commit=False is another can of worms.  No use dealing
        # it before it's needed. (YAGNI)
        assert commit == True 
        res = super(LinkSectionForm, self).save(commit=commit)
        self.link_formset.save()
        return res

(Это просто пришло мне в голову и не тестировалось, но должно помочь вам двигаться в правильном направлении.)

Ваш шаблон просто должен правильно отображать форму и form.link_formset .

22
ответ дан 7 November 2019 в 10:25
поделиться

Моя рекомендация состояла бы в том, чтобы на самом деле изменить Вашу модель. Почему бы не a ForeignKey в Link кому: LinkSection? Или, если это не OneToMany, возможно, a ManyToMany поле? Администраторский интерфейс генерирует это бесплатно. Конечно, я не рекомендую это, если ссылки логически не имеют никакого отношения к разделам ссылки, но возможно они делают? Если они не делают, объясните, какова намеченная организация. (Например, 3 ссылки на раздел, зафиксированный или произвольный?)

1
ответ дан David Berger 7 November 2019 в 10:25
поделиться

Вы можете создать новый класс, аналогичный TabularInline или StackedInline, который может сам использовать встроенные поля.

В качестве альтернативы вы можете создать новые шаблоны администрирования специально для вашей модели. Но это, конечно же, отменяет изящные функции интерфейса администратора.

0
ответ дан 7 November 2019 в 10:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: