Como executo uma instrução update
e select
no mesmo, em queryset
vez de ter que fazer duas consultas: - uma para selecionar o objeto - e outra para atualizar o objeto
O equivalente no SQL seria algo como:
update my_table set field_1 = 'some value' where pk_field = some_value
update
método como esse, qualquer sinal anexado a esse modelo ou outro "código" não será executado nos objetos. Apenas um ponteiro de alguém que se queimou:) #update
método é ótimo para atualizações em massa, mas deve desencadear uma advertência em sua cabeça quando você usá-lo de que você precisa rever quaisquer sinais ligados a esse objeto que também pode precisar de ser manualmente disparadoMyModel.objects.filter(pk=some_value).update(field1=self.data)
Os objetos de banco de dados Django usam o mesmo método save () para criar e alterar objetos.
Ref .: https://docs.djangoproject.com/en/1.9/ref/models/instances/
fonte
Esta resposta compara as duas abordagens acima. Se você deseja atualizar muitos objetos em uma única linha, vá para:
Caso contrário, você teria que percorrer o conjunto de consultas e atualizar objetos individuais:
A abordagem 1 é mais rápida porque faz apenas uma consulta ao banco de dados, em comparação com a abordagem 2, que realiza consultas 'n + 1'. (Para n itens no conjunto de consultas)
A primeira abordagem faz uma consulta de banco de dados, ou seja, UPDATE, a segunda faz duas: SELECT e UPDATE.
A desvantagem é que, suponha que você tenha acionadores, como atualização
updated_on
ou quaisquer campos relacionados, ele não será acionado na atualização direta, ou seja, na abordagem 1.A abordagem 1 é usada em um conjunto de consultas, portanto, é possível atualizar vários objetos de uma vez, não no caso da abordagem 2.
fonte
apenas em um caso de
serializer
coisas, você pode atualizar de uma maneira muito simples!apenas em um caso de
form
coisas!fonte
Django form
é do Django Proper.