我不明白這一點。這種模式有一個類方法,以查找所有地址,並更新它們,但它不工作:Django不更新classmethod中的對象。很奇怪
views.py
address = Address.objects.get(id=address_id)
default = request.data.get("default", address.default)
if default.lower() == "true":
print "default is true"
Address.set_default_address(address.id, address.client)
else:
print "default is false"
address.default = default
print "in view -> address.id - address.default: %s - %s" % (address.id, address.default)
Address.set_default_address:
class Address(models.Model):
...
default = models.BooleanField(default=False)
@classmethod
def set_default_address(cls, address_id, client):
client_addresses = Address.objects.filter(client=client)
print "client_addresses: %s" % client_addresses
for address in client_addresses:
if address.id != address_id:
print "address is set to False - address id: %s" % address.id
address.default = False
address.save()
else:
print "address is set to True! - address id: %s" % address.id
address.default = True
address.save()
print "classmethod address.id - address.default: %s - %s" % (address.id, address.default)
的如果新地址必須設置爲default=True
並將所有其他地址更改爲default=False
,則設計爲classmethod
。
打印輸出看起來像這樣:
默認爲true
client_addresses:[,]
地址被設定爲假 - 地址ID:1個
地址被設置爲真! - 地址編號:2
類方法address.id - address.default:2 - 真
鑑於 - > address.id - address.default:2 - 假
正如你所看到的,在classmethod中調用的打印看起來像它將address.default
設置爲True
,但視圖中的打印顯示相反。爲什麼?