Как создать страницу ввода для родительской модели, чей ребенок имеет несколько внешних ключей в Django? - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь создать единую страницу ввода, используя Django, которая позволит вводить все о клиенте в одном месте.Мои клиенты могут иметь несколько мест.Каждое Местоположение имеет внешний ключ не только для своего Клиента, но также для Контакта и менеджера по работе с клиентами (Местоположение имеет 3 внешних ключа всего).Клиент, местоположение, контакт и менеджер аккаунта - все модели;у всех них есть несколько текстовых и логических полей в дополнение к внешним ключам в Location, о которых я уже упоминал.

В идеале, страница ввода позволит пользователю вводить одного клиента, одновременно создавая несколько новых Locations, исоздание нового Контакта и Менеджера учетных записей для каждого - или выборочного выбора существующего Контакта или Менеджера учетных записей.

Каков наилучший способ планирования дизайна этой страницы ввода?Должен ли я смотреть на ModelForms и InlineFormsets?Или я должен создать новую форму Django с нуля?Или Formset, основанный на нескольких формах Django?

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

1 Ответ

0 голосов
/ 25 сентября 2018

Что бы я сделал:

Поскольку вы имеете дело с моделями, ModelForm будет проще всего, поскольку он автоматически проверяет аргументы, предоставленные в ваших моделях, например max_length,и т.д.

И так как у вас так много ForeignKeys, и потому что я не знаю, сколько полей у каждой модели (хотя, похоже, у вас много) ... Для упрощениякод, если бы я был тобой, я бы сделал вид, что создается только Заказчик.Зачем?Потому что это ваша родительская модель, а другая не может существовать без нее.

После этого я бы сделал отдельное представление, чтобы позволить этому новому Заказчику добавлять новое Местоположение по одному и устанавливать правильноеСвязаться и AccountManager вместе с ним, потому что, как вы сказали, они могут добавить любое их количество.Если вы сделали все это сразу, то отображение X числа дополнительных форм на той же странице, чтобы они могли заполнить больше форм Location, Contact и AccountManager, с большей вероятностью будет содержать больше ошибок от пользователя.Хранение вещей может помочь уменьшить это.Поскольку вы не показали никакого кода, я не могу сказать намного больше, чем это, потому что я не знаю, какие из этих других полей модели являются обязательными или нет, или даже сколько у вас есть, но это звучит как многополя.

Дополнительные комментарии:

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

Достоинством является ясность для пользователя, поэтому они знают, что нужно сделать что-то одно за один раз, ивам также легче написать код, потому что вам не нужно брать число Х других потенциальных моделей.Допустим, у вас был клиент с 10 другими моделями, и вы хотели, чтобы все было собрано в одном представлении ... Написание функции для этого было бы намного сложнее.

Было бы полезноесли вы поместите здесь свой собственный код, , потому что для меня это звучит так, будто вы хотите сделать квитанцию ​​с их адресом, телефоном и местонахождением, и если я прав, вы могли бы легко добавитьполя из Контакта и Местоположения внутри модели Customer.Или, может быть, даже установить некоторые из этих полей в модели Customer как поля местоположения и контакта по умолчанию, а затем, если пользователь хочет больше, дать им представление, позволяющее им создавать дополнительные Location, Contact и AccountManager.

...