0

假设您有一个 ActiveDirectoryUser 模型:

class ActiveDirectoryUser(models.Model):
    object_guid = models.CharField(max_length=200, unique=True)
    mail = models.EmailField(unique=True)
    name = models.CharField(max_length=200)

此模型由 Active Directory 查询填充。每天,我都会重新运行一个查询 Active Directory 的作业,获取结果,并检查此人是否已经在 AD 中。如果是,则检查是否有任何更改,如果没有,则将它们添加到数据库中。我发现自己在写:

try:
    ad_user = ActiveDirectoryUser.objects.get(object_guid=object_guid)
    ad_user.object_guid = object_guid
    ad_user.mail = mail
    ad_user.name = name
    ad_user.save()

except ActiveDirectoryUser.DoesNotExist:
    ActiveDirectoryUser(
    object_guid=object_guid,
    mail=mail, 
    name=name).save()

基本上,我尝试获取具有属性的对象,如果这引发了 DoesNotExist 异常,我知道它还不存在,所以我创建了一个新的。这是将新对象更新或保存到数据库中的正确/最佳/惯用方式吗?我知道它有效,但不知何故它看起来不对。不雅。

4

1 回答 1

1

不,django 有一个内置的方法来做到这一点。

entry, created = ActiveDirectory.objects.get_or_create(
    object_guid = 'your_value',
    name =  = 'your_value',
    mail = 'your_value'
)
于 2013-01-26T22:03:34.813 回答