retrieve query from data django django-models django-views django-database

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.