query - get object model django
Actualizar solo campos específicos en un models.Model (2)
Para actualizar un subconjunto de campos, puede usar update_fields
:
survey.save(update_fields=["active"])
El argumento update_fields
se agregó en Django 1.5. En versiones anteriores, podría usar el método update()
lugar:
Survey.objects.filter(pk=survey.pk).update(active=True)
Tengo un modelo
class Survey(models.Model):
created_by = models.ForeignKey(User)
question = models.CharField(max_length=150)
active = models.NullBooleanField()
def __unicode__(self):
return self.question
y ahora quiero actualizar solo el campo active
. Entonces hago esto:
survey = get_object_or_404(Survey, created_by=request.user, pk=question_id)
survey.active = True
survey.save(["active"])
Ahora recibo un error IntegrityError: PRIMARY KEY must be unique
.
¿Estoy en lo correcto con este método para actualizar?
Por lo general, la forma correcta de actualizar ciertos campos en una o más instancias del modelo es usar el método update()
en el conjunto de consultas respectivo. Entonces haces algo como esto:
affected_surveys = Survey.objects.filter(
# restrict your queryset by whatever fits you
# ...
).update(active=True)
De esta forma, ya no necesita llamar a save()
en su modelo porque se guarda automáticamente. Además, el método update()
devuelve el número de instancias de encuesta que se vieron afectadas por su actualización.