在patch
之后获得结果时,我会出现不一致之处。我尝试在打补丁后比较结果。我想将数据存储在变量中,然后在修补时将其删除。当我尝试在修补数据后打印数据时,它将获得新的不同结果。在下面,我想将旧狗存储在old
中。但是,修补后,它会更新为新值,例如new
。我的修补程序序列化程序在修补时会删除旧记录。
#models.py
class Owner(models.Model):
owner = models.CharField()
class Dog(models.Model):
owner = models.ForeignKey(Owner,on_delete=models.CASCADE)
name = models.CharField()
#test.py
class Update(APITestCase):
def test_update_dog(self):
old = Dog.objects.filter(owner=1).order_by('id')
print(old) # <QuerySet [<Dog: Ben>, <Dog: Phoebe>]>
data = {
'dogs': [
{'name': 'Ryan'},
{'name': 'Louis'}
]
}
response = self.client.post(
'/admin/login/', {'username': 'admin', 'password': 'password123'})
response = self.client.patch('/app/dogs/1/',
data=data,
format='json')
new = Dog.objects.filter(owner=1).order_by('id')
print(new) # <QuerySet [<Dog: Ryan>, <Dog: Louis>]>
print(old) # <QuerySet [<Dog: Ryan>, <Dog: Louis>]>
self.assertNotEqual(old[0].name, new[0].name)
self.assertNotEqual(old[1].name, new[1].name)
答案 0 :(得分:1)
原因是Django中的查询集为lazy。当您将旧结果存储在变量中时,并不意味着实际上已执行任何数据库活动。您可以只存储属性值并进行如下检查:
old = Dog.objects.filter(owner=1).order_by('id').values('id', 'name')
...
self.assertNotEqual(old, new.values('id', 'name'))