Django 如何迭代从 ldap 返回的列表以保存新对象

Django How to iterate over list returned from ldap to save new object

我有以下型号:

class SystemUsers(models.Model):
    username = models.CharField(max_length=25)
    displayName = models.CharField(max_length=100)
    phoneNumber = models.BigIntegerField(max_length=10)
    emailAddress = models.EmailField(max_length=100)
    employeeNumber = models.CharField(max_length=7)
    firstName = models.CharField(max_length=20)
    lastName = models.CharField(max_length=30)

我有一个从活动目录返回以下内容的 ldap 查询:

user_details = []
            for entry in results:
                user_details.append(entry[1]['sAMAccountName'][0].lower())
                user_details.append(entry[1]['displayName'][0].replace(",", " "))
                user_details.append(entry[1]['telephoneNumber'][0].replace("-", ""))
                user_details.append(entry[1]['mail'][0].lower())
                user_details.append(entry[1]['employeeID'][0].lower())
                user_details.append(entry[1]['givenName'][0])
                user_details.append(entry[1]['sn'][0])

                return user_details

我得到了预期的结果,但我无法解析列表以将其放入 SystemUser(....).save() 块以将其保存到数据库。我得到的只是一个我无法循环或为其设置变量的列表。

当我做

for item in user_details:
     print(item)

我只有 7 行值。我无法得到它,所以 item[0] 是用户名,item[1] 是显示名称,等等,etc

您可以使用用户数据创建字典并使用 kwargs 魔法:

field_names = ('username', 'displayName', 'phoneNumber', 'emailAddress',
               'employeeNumber', 'firstName', 'lastName', )
data = dict(zip(field_names, user_details)
SystemUser.objects.create(**data)

顺便说一句,从一开始就把 user_details 作为字典可能是个更好的主意?

user_details = {
    'username': entry[1]['sAMAccountName'][0].lower(),
    'displayName': entry[1]['displayName'][0].replace(",", " "),
    'phoneNumber': entry[1]['telephoneNumber'][0].replace("-", ""),
    'emailAddress': entry[1]['mail'][0].lower(),
    'employeeNumber': entry[1]['employeeID'][0].lower(),
    'firstName': entry[1]['givenName'][0],
    'lastName': entry[1]['sn'][0],
}
SystemUser.objects.create(**user_details)