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 例外をスローする場合、それがまだそこにないことがわかっているので、新しいオブジェクトを作成します。これは、新しいオブジェクトをデータベースに更新または保存する正しい/最良の/慣用的な方法ですか? 私はそれが機能することを知っていますが、どういうわけか間違っているようです。エレガントではない。