Я новичок в django и пытаюсь выполнить модульный тест, в котором я хочу сравнить QuerySet до и после вызова функции пакетного редактирования.
def test_batchEditing_9(self):
reset() #reset database for test
query = Game.objects.all()
query_old = Game.objects.all()
dict_value = {'game_code' : '001'}
Utility.batchEditing(Game, query, dict_value)
query_new = Game.objects.all()
self.assertTrue(compareQuerySet(query_old, query_new))
Моя проблема в том, что query_old будетобновляться после вызова batchEditing.Поэтому оба набора запросов будут одинаковыми.
Похоже, что QuerySet привязан к текущему состоянию базы данных.Это нормально?Есть ли способ отсоединить QuerySet от базы данных?
Я пробовал queryset.values, list (queryset), но он все равно обновляет значение.На самом деле я думаю об итерации набора запросов и создании списка словарей самостоятельно, но я хочу знать, есть ли более простой способ.
Вот batchEditing (не вставлял проверку достоверности ввода)
def batchEditing(model, query, values):
for item in query:
if isinstance(item, model):
for field, val in values.iteritems():
if val is not None:
setattr(item, field, val)
item.save()
Вот сравнениеQuerySet
def compareQuerySet(object1, object2):
list_val1 = object1.values_list()
list_val2 = object2.values_list()
for i in range(len(list_val1)):
if list_val1[i] != list_val2[i]:
return False
return True