Отображение ModelChoiceFields на обеих сторонах отношения с внешним ключом - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть две модели с отношениями внешнего ключа между ними.В администраторе на странице редактирования для модели с описанным отношением внешнего ключа (Модель № 1) отображается ModelChoiceField.Страница для другой стороны отношения (Модель № 2) ничего не отображала, пока я не добавил первую модель в ModelAdmin в качестве встроенного.Встроенная функция дает мне возможность создать новый объект из модели № 1.

Я хочу добавить ModelChoiceField в встроенную модель № 2, чтобы пользователи могли выбирать между созданием нового объекта или выбором изсписок уже существующих.

В идеале я также мог бы использовать фильтр для заполнения нового ModelChoiceField для объектов модели № 1.

1 Ответ

2 голосов
/ 09 декабря 2011

Хорошо, задание этого вопроса не принесло мне ничего, кроме отличного значка для моего профиля. В конце концов я обнаружил следующее решение. Это проще, чем я ожидал, но мне пришлось задать еще один вопрос здесь , потому что после реализации выбор из ModelChoiceField на странице администратора и сохранение не создают отношения внешнего ключа, как ожидалось.

В любом случае, по решению:

Модель My Art содержит логическое поле "has_storypak", чтобы указать, имеет ли оно отношение и экземпляр модели Storypak. Так как я ожидал, что экземпляры Art будут иметь отношение только к одному Storypak, в то время как Storypaks может иметь много связанных художественных работ, я написал следующее настраиваемое поле, содержащее только те экземпляры, для которых значение has_storypak было False.

class RuntimeArtSelectForm(forms.ModelForm):
    storypak_orphan = forms.ModelChoiceField(label="Art",
            queryset=Art.objects.filter(has_storypak=False))
    class Meta:
        model = Art
        fields = ('storypak_orphan',)

Затем я добавил эту форму для встроенной формы для модели Art ...

class ArtInline(admin.TabularInline):
    model = Art
    form = RuntimeArtSelectForm

... и включил ArtInline в ModelAdmin для Storypak. Это дало мне выпадающий список, содержащий отфильтрованный список объектов модели, которые я искал. Однако у меня все еще есть проблема, упомянутая выше, и этот открытый вопрос ищет решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...