Django批量更新不适用于默认属性

2024-04-27 23:17:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我想更改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_筛选器未更新。谁知道为什么不呢


Tags: 模型selffalsetrueobjectssettingsmodelsnotification
2条回答

bulk_update()在这种情况下不一定需要。由于此更新操作直接在queryset的所有对象上执行,因此仅使用update()将在单个操作中自动进行更改

批量更新更适合于更新不同模型实例的操作

但是,如果您仍然喜欢使用bulk_update,那么以下是答案: user_settings_1在这里是内存中的实例,而bulk_update操作在数据库中进行了更改。您需要从数据库中刷新它

我认为您正在使用过时的实例,因此您可能需要user_settings_1.refresh_from_db()

相关问题 更多 >