我想更改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_筛选器未更新。谁知道为什么不呢
bulk_update()
在这种情况下不一定需要。由于此更新操作直接在queryset的所有对象上执行,因此仅使用update()
将在单个操作中自动进行更改批量更新更适合于更新不同模型实例的操作
但是,如果您仍然喜欢使用
bulk_update
,那么以下是答案:user_settings_1
在这里是内存中的实例,而bulk_update操作在数据库中进行了更改。您需要从数据库中刷新它我认为您正在使用过时的实例,因此您可能需要
user_settings_1.refresh_from_db()
相关问题 更多 >
编程相关推荐