我有一个名为 StaffSettings 的 Django 模型,其中包含我的 Django 应用程序中用户的各种配置选项。每个用户在 StaffSettings 表中最多有一个条目。
假设一个设置是 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()
我希望函数的主体适合一行,因为它似乎是一个常见的用例,但如果我将它定义为
def set_default_year_level(u, year_level):
StaffSettings.objects.filter(user=u).update(default_year_level=year_level)
如果有问题的用户在 StaffSettings 表中已经有一行,那么它工作正常,但如果它不存在,它将不会创建相关行。
编写此代码的惯用/最佳方式是什么?(例如,是否有某种filter_or_create
功能?或者其他人是否编写装饰器/辅助功能来处理这个习语?)