Администратор Django: встроенная модель Many2Many с двумя внешними ключами - PullRequest
0 голосов
/ 02 марта 2011

после того, как я поразил мой мозг в течение нескольких дней, я просто надеюсь, что кто-то может указать мне правильный подход.У меня есть 4 модели: Страница, Элемент, Стиль и Пост.

Вот мой простой образец models.py/admin.py: http://pastebin.com/uSHrG0p2

В 2 предложениях:

A Элемент ссылается на 1 стиль и 1 сообщение (2 FK).

Страница может ссылаться на множество элементов, на элементы можно ссылаться на многих страницах (M2M).

На сайте администратора для Page.случаи я включил отношение M2M как «встроенный».Так что у меня есть несколько строк, чтобы выбрать элементы-экземпляры.Одна строка выглядит так: [My Post A with My Style X] [V]

Я хочу заменить один выпадающий список двумя выпадающими.Один со всеми экземплярами Post и один со всеми экземплярами Style (создание экземпляров Element на месте).Так что одна строка будет выглядеть так же, как на сайте администратора Element: [My Post A] [V] [My Style X] [V]

Звучит просто, но я просто совершенно потерян после чтения и экспериментов с2 дня с ModelForms, ModelAdmins, Formsets, ....Могу ли я сделать это без пользовательских представлений / форм в функциональности администратора Django?

Один из моих подходов состоял в том, чтобы получить доступ к экземплярам Post / Style из PageAdminForm, как это, пытаясь создать виджет формы вручную из него ..... но не смог этого сделать:

p = Page.objects.get(pk=1)
f = PageAdminForm(instance=p)
f.base_fields['elements'].choices.queryset[0].post

Любой совет или намек, куда мне нужно идти?Спасибо за ваше время!

1 Ответ

1 голос
/ 03 марта 2011

Я получил именно то, что хотел после удаления поля M2M и связывания Элементов со Страницей с 3-м ForeignKey в Элементе:

class Element(models.Model):
    page = models.ForeignKey(Page)        
    post = models.ForeignKey(Post)
    style = models.ForeignKey(Style)

На самом деле ссылка без M2M имеет больше смысла для моего приложения после всех.

Заметка для себя: Переосмыслите отношения модели, прежде чем пытаться перехитрить Джанго: - (

...