Поле формы внешнего ключа в администраторе django

Я хочу настроить свое приложение на основе администратора django, чтобы оно было более удобным для пользователя.

Добавить страницу предложения

Следующая админка хороша, когда пользователь создает Предложение клиенту, который уже зарегистрирован в системе. Но если клиент новый, пользователь должен щелкнуть + и отправить форму «Добавить нового клиента» во всплывающем окне. Это так сбивает с толку.

Как я могу изменить это поведение, чтобы заполнить данные клиента на той же странице встроенными, но не во всплывающем окне?

Вот мой admin.py.

class OptionOffer(admin.ModelAdmin):
   fieldsets = (('', {'fields': (('client'), 'startDate', 'regNumber')}),)

class OptionClient(admin.ModelAdmin):
   fieldsets = (('', {'fields': ('code')}),)

и модель.py

class Client(models.Model):
    code = models.CharField(verbose_name=_("Code"), max_length=11)

class Offer(models.Model):
    client = models.ForeignKey(Client, verbose_name = _("Client"))
    startDate = models.DateTimeField(verbose_name = _("Start date"))
    regNumber = models.CharField(verbose_name=_("Registration number"), max_length=6)

person user537723    schedule 25.11.2011    source источник


Ответы (2)


Вы можете использовать некоторую структуру Javascript, например jQuery, и загружать всплывающее окно на странице редактирования с помощью iframe или чего-то подобного. Или используйте всплывающее окно в стиле лайтбокса вместо стандартного Django.

person dan-klasson    schedule 27.11.2011

Вы не получите лучшего решения без серьезного взлома администратора django. Вы можете встретить (или вам укажут) InlineModelFormsets, которые предоставляют форму в нижней части текущей формы, позволяющую добавлять клиентов в процессе. Хотя может показаться, что это то, что вам нужно, вскоре вы увидите, что это не соответствует вашему варианту использования, поскольку требует отношения внешнего ключа от клиента к предложению, в отличие от того, что у вас есть, которое является отношением внешнего ключа от Предложение клиенту

person Timmy O'Mahony    schedule 25.11.2011
comment
Спасибо за ваш ответ. Означает ли это, что любой шаг влево или сразу из обычного приложения администратора django заставит меня страдать? Очень часто пользователь хочет внести логически связанные изменения на одной странице. Возможно, я мог бы вообще не использовать Django для решения такой проблемы. Что вы думаете? Можете ли вы указать мне хороший пример использования администраторами django с открытым исходным кодом, чтобы я мог учиться на лучших практиках. - person user537723; 26.11.2011