Respostas:
Use o método de objetoupdate
queryset :
MyModel.objects.filter(pk=some_value).update(field1='some value')
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 disparado
MyModel.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.
obj = Product.objects.get(pk=pk)
obj.name = "some_new_value"
obj.save()
Como o Django sabe UPDATE vs. INSERT
Se o atributo de chave primária do objeto estiver definido como um valor avaliado como True (ou seja, um valor diferente de None ou a string vazia), o Django executará um UPDATE. Se o atributo de chave primária do objeto não estiver definido ou se o UPDATE não atualizou nada, o Django executa um INSERT.
Ref .: https://docs.djangoproject.com/en/1.9/ref/models/instances/
Esta resposta compara as duas abordagens acima. Se você deseja atualizar muitos objetos em uma única linha, vá para:
# Approach 1
MyModel.objects.filter(field1='Computer').update(field2='cool')
Caso contrário, você teria que percorrer o conjunto de consultas e atualizar objetos individuais:
#Approach 2
objects = MyModel.objects.filter(field1='Computer')
for obj in objects:
obj.field2 = 'cool'
obj.save()
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.
apenas em um caso de serializer
coisas, você pode atualizar de uma maneira muito simples!
my_model_serializer = MyModelSerializer(
instance=my_model, data=validated_data)
if my_model_serializer.is_valid():
my_model_serializer.save()
apenas em um caso de form
coisas!
instance = get_object_or_404(MyModel, id=id)
form = MyForm(request.POST or None, instance=instance)
if form.is_valid():
form.save()
Django form
é do Django Proper.
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:) #