¿Cómo ejecuto un update
y select
declaraciones en el mismo en queryset
lugar de tener que hacer dos consultas: una para seleccionar el objeto y otra para actualizar el objeto
El equivalente en SQL sería algo como:
update my_table set field_1 = 'some value' where pk_field = some_value
update
método como este, entonces las señales adjuntas a ese modelo u otras "cosas de código" no se ejecutarán contra los objetos. Solo un puntero de alguien que se quemó :)update
método es ideal para actualizaciones masivas, pero debe activar una advertencia en su cabeza cuando lo use para revisar cualquier señal adjunta a ese objeto que también deba dispararse manualmenteMyModel.objects.filter(pk=some_value).update(field1=self.data)
Los objetos de la base de datos de Django usan el mismo método save () para crear y cambiar objetos.
Ref .: https://docs.djangoproject.com/en/1.9/ref/models/instances/
fuente
Esta respuesta compara los dos enfoques anteriores. Si desea actualizar muchos objetos en una sola línea, vaya a:
De lo contrario, tendría que iterar sobre el conjunto de consultas y actualizar objetos individuales:
El enfoque 1 es más rápido porque solo realiza una consulta a la base de datos, en comparación con el enfoque 2, que realiza consultas de base de datos 'n + 1'. (Para n elementos en el conjunto de consultas)
El primer enfoque hace una consulta db, es decir, ACTUALIZAR, la segunda hace dos: SELECCIONAR y luego ACTUALIZAR.
La compensación es que, supongamos que tiene algún desencadenante, como la actualización
updated_on
o cualquier campo relacionado, no se activará en la actualización directa, es decir, el enfoque 1.El enfoque 1 se usa en un conjunto de consultas, por lo que es posible actualizar varios objetos a la vez, no en el caso del enfoque 2.
fuente
¡solo en un caso en las
serializer
cosas, puedes actualizar de una manera muy simple!solo en un caso en las
form
cosas!fuente
Django form
es de Django Proper.