Здравствуйте, очень нужна ваша помощь.

Недавно начал работать с Django и вообще Python. Пытаюсь сейчас сделать небольшой портальчик для локальной сети с авторизацией по LDAP. Все бы хорошо, ести бы не одно НО. Хотелось бы сделать так, чтобы авторизированного пользователя портал приветствовал по имени, которое берется и Active Directory. Как это оттуда вытаскивать я научился, а вот записать это в базу MySQL портала, а конкретно в таблицу auth_user в поля first_name и last_name не получается. Делаю так:

from portal.news.models import CustomUser 

...

 def updape_user_info(self, username):
     #import pdb; pdb.set_trace()
     global ldap_client
     LDAP_PATH = 'dc='
     for c in settings.LDAP_DOMAIN:
      if c=='.':
       LDAP_PATH=LDAP_PATH+',dc='
      else:
       LDAP_PATH=LDAP_PATH+c 
     r = ldap_client.search_s(LDAP_PATH,ldap.SCOPE_SUBTREE,'(mailNickname='+username+'*)',['givenName','sn','mail'])
     res = ldaphelper.get_search_results(r)
     for record in res:
         email = record.get_attr_values('mail')[0]
         user=CustomUser.objects.get(email=email.lower())
         user.first_name = unicode(record.get_attr_values('givenName')[0],'utf-8')
         print user.first_name
         user.last_name = unicode(record.get_attr_values('sn')[0],'utf-8')
         print user.last_name
         user.save()


Изменить эти поля я пытаюсь когда запись этого пользователя уже создана. Я даже вижу вывод print-ом на консоль user.first_name и user.last_name. А потом заглядываю в базу а там поля пустые.
Как их туда затолкать? Помогите пожалуйста. :/

Last edited 2009-07-08 12:00:47

Таки таблица auth_user - это модель django.contrib.auth.models.User, а вы пишете в portal.news.models.CustomUser

Может быть, в чего-то напутали?

Забыл сказать, что CustomUser - это наследник User.

class CustomUser(User):
    timezone = models.CharField(max_length=50, default='Europe/London')
    objects = UserManager()


Или так работать не будет? CustomUser.set_password же работает у меня...
Вот так сейчас попробовал

    def updape_user_info(self, username):
     #import pdb; pdb.set_trace()
     global ldap_client
     LDAP_PATH = 'dc='
     for c in settings.LDAP_DOMAIN:
      if c=='.':
       LDAP_PATH=LDAP_PATH+',dc='
      else:
       LDAP_PATH=LDAP_PATH+c 
     r = ldap_client.search_s(LDAP_PATH,ldap.SCOPE_SUBTREE,'(mailNickname='+username+'*)',['givenName','sn','mail'])
     res = ldaphelper.get_search_results(r)
     for record in res:
         mymail = record.get_attr_values('mail')[0]
         user=User.objects.get(email=mymail.lower())
         user.first_name = u'Vasya' #unicode(record.get_attr_values('givenName')[0],'utf-8')
         print user.first_name
         user.last_name = u'Pupkin' #unicode(record.get_attr_values('sn')[0],'utf-8')
         print user.last_name
         user.save()


Тот же самый результат... :(

Не знаю. Попробуйте сделать то же самое в ./manage.py shell, если будет работать в какой-нить вьюшке, если тоже будет работать, то сравните - найдите разницу. Если нигде не работает, значит вы как-то унаследовали неправильно модели )