Администратор Django: как добавить несвязанное поле модели на страницу изменения / добавления модели? - PullRequest
1 голос
/ 18 мая 2010

У меня есть следующие модели:

class Foo(models.Model):
    field1 = models.IntegerField()
    ...

class Bar(models.Model):
    field1 = models.IntegerField()
    ...

class Foo_bar(models.Model):
    foo = models.ForeignKey(Foo)
    bar = models.ForeignKey(Bar)
    ...

В админке я хочу, чтобы на странице Foo change / add вы могли указать объект Bar, а при сохранении я хочу создать объект Foo_bar для представления отношений. Как я могу сделать это через настройку сайта администратора / ModelAdmins? Обратите внимание, что встраивание не совсем то, что мне нужно, потому что между foo и bar нет явного отношения внешнего ключа. И во-вторых, я на самом деле не хочу редактировать объекты панели, я просто хочу выбирать из тех, которые есть в системе.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 18 мая 2010

Вы уверены, что не хотите просто ManyToManyField ? В админке это проявилось бы как список с множественным выбором Bar объектов. Посмотрите на часть выбора группы администратора для User.

Если вам нужны дополнительные данные, связанные с отношением, вы можете использовать параметр through :

class Foo(models.Model):
    field1 = models.IntegerField()
    bars = models.ManyToManyField("Bar", related_name="foos", through="Foo_bar")

Вам необходимо добавить Foo_bar для администратора, чтобы редактировать эти дополнительные параметры в администраторе.

1 голос
/ 18 мая 2010

Я могу представить две возможности:

  1. Вы можете создать пользовательскую форму для вашей модели Foo и добавить в нее поле, содержащее набор запросов Bar.objects.all(). затем переопределите метод save_form() по умолчанию для ModelAdmin, чтобы создать новый экземпляр Bar после сохранения объекта.

  2. Вы можете создать собственный класс поля и добавить его к своей модели Foo, и классифицировать эту функцию с помощью сигнала «post_save »...

...