Djangoアプリのユーザー向けのさまざまな構成オプションを含むStaffSettingsというDjangoモデルがあります。各ユーザーは、StaffSettingsテーブルに最大で1つのエントリを持ちます。
1つの設定がdefault_year_levelであり、次のようなユーザーオブジェクトのコードがあるとします。
def set_default_year_level(u, year_level):
obj, _created = StaffSettings.objects.get_or_create(user=u)
obj.default_year_level = year_level
obj.save()
一般的なユースケースのように見えるので、関数の本体を1行に収めることをお勧めしますが、次のように定義した場合
def set_default_year_level(u, year_level):
StaffSettings.objects.filter(user=u).update(default_year_level=year_level)
これは、問題のユーザーがすでにStaffSettingsテーブルに行を持っている場合は正常に機能しますが、存在しない場合は関連する行を作成しません。
これをコーディングするための慣用的/最良の方法は何ですか?(たとえば、ある種のfilter_or_create
関数はありますか?または他の人はこのイディオムを処理するためにデコレータ/ヘルパー関数を作成しますか?)