É possível atualizar o estado de um objeto django do banco de dados? Quero dizer comportamento aproximadamente equivalente a:
new_self = self.__class__.objects.get(pk=self.pk)
for each field of the record:
setattr(self, field, getattr(new_self, field))
ATUALIZAÇÃO: Foi encontrada uma guerra de reabertura / correção de erros no rastreador: http://code.djangoproject.com/ticket/901 . Ainda não entendo por que os mantenedores não gostam disso.
Isso parece uma função desnecessária; já é possível apenas procurar novamente o objeto no banco de dados.
—
Stephan
Não é apropriado porque os objetos de modelo do Django são proxies. Se você obtiver a mesma linha da tabela em dois objetos - x1 = X.objects.get (id = 1); x2 = X.objects.get (id = 1), eles serão testados como iguais, mas são objetos diferentes e o estado não é compartilhado. Você pode alterar os dois independentemente e salvá-los - o último salvo determina o estado da linha no banco de dados. Portanto, é correto recarregar com atribuição simples - x1 = X.objects.get (id = 1). Ter um método de recarga levaria muitas pessoas a inferir erroneamente que x1.f = 'novo valor'; (x1.f == x2.f) é True.
—
Paul Whipp 06/02
commmit
. Depois de fazer isso, você terá que aguardar a confirmação da próxima transação SQL. Por que fazer isso? Quanto tempo você espera pela próxima transação?