В настоящее время я работаю над проектом, включающим фреймворк Django и OpenLDAP . Но я столкнулся с проблемой.
В моей базе данных LDAP есть запись с именем Accounts со следующими атрибутами:
dn: ou=Accounts,dc=example,dc=ro
objectClass: groupOfNames
objectClass: top
cn: Accounts
member: cn=test1,ou=Accounts,dc=example,dc=ro
member: cn=test2,ou=Accounts,dc=example,dc=ro
member: cn=test3,ou=Accounts,dc=example,dc=ro
... (and so on, about 10 test users)
Чтобы управлять своими записями LDAP из Django Models, я использую пакет python django_ldapdb . В моделях .py в django я определил следующие вещи:
class LDAPEntry():
base_dn = "ou=Accounts,dc=example,dc=ro"
object_classes = ["groupOfNames"]
group_name = CharField(db_column="cn", primary_key=True)
member_attribute = CharField(db_column="member")
# methods for displaying the group name(__str__ & __unicode__)
После этого я открываю Django Shell и начинаю экспериментировать с некоторыми запросами:
#this returns a instance for the Accounts group
group = LDAPEntry.objects.get(group_name = "Accounts")
#then i try to see the members that are part of this group
group.member
# and this returns the following thing:
u'cn=test1,ou=Accounts,dc=example,dc=ro'
Заметив это, я понимаю, что поле member в моем Модель Django содержит информацию только об атрибуте первого члена в моей записи учетных записей LDAP в базе данных LDAP.
Я хочу спросить: есть ли способ указать, что поле модели Django хранит несколько значений? (я хочу, чтобы мое поле «участник» содержало информацию обо всех участниках в группе учетных записей, в основном, содержащих все отличительные имена пользователей).
Большое спасибо.
Оказывается, что ситуацию можно разрешить, изменив:
member_attribute = CharField(db_column="member")
на:
member_attribute = ListField(db_column="member")
И этим все значения члена в Счета загружаются.