Создание заказа в Джанго - PullRequest
0 голосов
/ 30 мая 2009

Привет всем У меня есть несколько вопросов по поводу администратора django.

Сначала соответствующие детали. В настоящее время у меня есть модели «Клиент», «Принтер», «Картридж» и «Заказ».

Модель принтера имеет модель ManyToManyField to Cartridge, которая позволит вам выбрать все картриджи, которые можно использовать с этим принтером.

У Cliente есть ManyToManyField для принтеров, которыми они владеют.

1) Я хочу создать Заказ через администратора Django, который позволит вам указать Клиента, диктант и несколько картриджей через ManyToManyField. Это становится немного сложнее, потому что я должен сделать это через другую таблицу, которая определяет, будет ли это новый картридж или заправка.

2) Я хочу, чтобы админ отфильтровал картриджи, чтобы показать только те, которые принадлежат принтерам, которыми они владеют.

3) Также я хотел бы иметь поле, содержащее общую стоимость их заказа, но оно должно рассчитываться на основе количества картриджей, добавленных в заказ. Я не знаю, следует ли это сделать, добавив в заказ больше одного и того же картриджа или добавив в соответствующее поле другое поле, в котором указано количество.

Можно ли это сделать в админке или мне нужно использовать форму? И если да, то как мне добавить это к администратору? Это кажется трудным и, вероятно, что-то, что мне придется сделать из нескольких частей, так как для фильтрации списка картриджей мне нужно заранее знать клиента.

Ответы [ 2 ]

2 голосов
/ 31 мая 2009

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

Лучшее предложение, если вы действительно хотите сделать это в форме администратора, это использовать Javascript для этого. Вам все равно придется делать вызовы AJAX, чтобы получить списки того, какие принтеры есть у клиентов и какие картриджи показывать, основываясь на этом, но это можно сделать. Вы бы просто указали JS-файлы для загрузки с классом Media .

Но я думаю, что это больше, чем стоит. Самый простой способ сделать это был бы с Form Wizards . Таким образом, у вас будет возможность выбрать клиента, чтобы на следующем шаге вы знали, какие картриджи показывать.

Надеюсь, это поможет!

1 голос
/ 02 июня 2009

Я работал над подобными проблемами и пришел к выводу, что во многих подобных случаях действительно лучше написать свой собственный интерфейс администрирования, используя формы, чем пытаться использовать функциональность в администраторе быть там.

Что касается пункта 3), это зависит от того, как выглядит ваша товарная база. Если у вас есть клиенты, заказывающие 50 идентичных виджетов, вам, вероятно, нужно поле количества. Если клиенты с большей вероятностью заказывают 2 виджета, один красный, другой синий, добавьте каждый элемент отдельно в поле manytomany и сгруппируйте их в интерфейсе заказа.

...