如何解决Django bulk_update无法使用默认属性
我想从Django模型中更改属性的默认值。所以我想更新数据库中的现有值。奇怪的是,批量更新不会更改这些值。
我的模特:
class UserSettings(models.Model):
offline_notification_filter = models.BooleanField(default=False)
我的测试
class TestSetOfflineNotificationMigration(APITestCase):
def test_set_offline_notification_filter_to_false(self):
user_settings_1 = UserSettingsFactory(offline_notification_filter=True)
user_settings_2 = UserSettingsFactory(offline_notification_filter=False)
user_settings_3 = UserSettingsFactory(offline_notification_filter=True)
user_settings_4 = UserSettingsFactory()
all_user_settings = UserSettings.objects.all()
for user_setting in all_user_settings:
user_setting.offline_notification_filter = False
UserSettings.objects.bulk_update(
all_user_settings,["offline_notification_filter"]
)
self.assertEqual(user_settings_1.offline_notification_filter,False)
此测试失败,因为offlince_notification_filter没有更新。有人知道为什么吗?
解决方法
我认为您正在使用过时的实例,因此您可能需要user_settings_1.refresh_from_db()
。
update()
。由于此更新操作直接在queryset的所有对象上执行,因此仅使用bulk_update
即可在单个操作中自动进行更改。
批量更新更适合于正在更新不同模型的实例的操作。
但是,如果您仍然喜欢使用user_settings_1
,那么答案如下:
ResultUsrInput
是此处的一个内存中实例,而bulk_update操作已在数据库中进行了更改。您需要从数据库中刷新它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。