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 に答える