2009-08-20 2 views
0

У меня есть модель, содержащая элементы, которые имеют много разных полей. Существует еще одна модель, которая назначает набор этого поля каждому пользователю с использованием отношения m2m.Пользовательская модель в Django

Я хочу, чтобы в конечном итоге каждый пользователь имел доступ к определенному набору полей модели элемента, и он видит это поле только в виде, он может редактировать только это поле и т. Д. Есть ли какие-либо общий способ установить это?

+0

Итак, у вас есть три объекта/модели/таблицы: Item-MapItemUser-User? И вы хотите, чтобы MapItemUser действовал как фильтр, поэтому каждый пользователь видит только часть элемента, это правильно? Вы хотите, чтобы фильтр был полностью динамическим или были, например, фиксированные типы пользователей (роли), которые всегда могут видеть один и тот же набор полей? –

ответ

0

Один из способов сделать это - разбить модель Item на части, которые индивидуально назначаются пользователю. Если у вас есть фиксированные типы пользователей (администратор, клиент, команда и т. Д.), Которые всегда могут видеть один и тот же набор полей, эти части будут целыми группами полей. Если это очень динамично, и вы хотите настроить отдельные поля для каждого пользователя, каждое поле является его частью.

Таким образом, у вас будет мета-элемент, который состоит исключительно из идентификатора, на который могут ссылаться части. Это объединяет части. Затем вы должны сопоставить пользователя не с Элементом, а с частями и восстановить представление элемента из общего идентификатора частей.

+0

Извините за задержку и спасибо за ответ. Сценарий довольно прост: у элемента-модели имеется огромное количество возможных полей, и каждый пользователь должен получить доступ только к небольшому набору. Я думаю, что это должно быть реализовано в модели (а не в представлении) для ее обобщения. Как бы вы создали такой фильтр? – schneck

0

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

Какой подход лучше для вас, зависит от того, как вы хотите фильтровать. Если это фиксированные типы пользователей, я бы, вероятно, использовал постпроцессор на основе правил, если он очень динамичный, я бы предложил подход от моего earlier answer. Еще одна причина, по которой ввести правила фильтрации в модель, будет, если вы хотите повторно использовать модель в приложениях, которые не могут повторно использовать механизм фильтрации (например, если у вас есть приложения на разных языках, которые используют одну и ту же базу данных).

Смежные вопросы