Пользовательская модель в Django - PullRequest
0 голосов
/ 20 августа 2009

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

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

Ответы [ 2 ]

0 голосов
/ 20 августа 2009

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

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

0 голосов
/ 20 августа 2009

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

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

...