Tengo esta declaración queryset largo en una vistaRe evaluar consulta Django después de los cambios realizados a la base de datos
contributions = user_profile.contributions_chosen.all()\
.filter(payed=False).filter(belongs_to=concert)\
.filter(contribution_def__left__gt=0)\
.filter(contribution_def__type_of='ticket')
que yo uso en mi plantilla
context['contributions'] = contributions
Y más tarde ese punto de vista hago cambios (agregar o quitar un registro) a la tabla contribuciones_cortas y si quiero que mi contexto ['contribuciones'] se actualice necesito volver a consultar la base de datos con la misma consulta larga.
contributions = user_profile.contributions_chosen.all()\
.filter(payed=False).filter(belongs_to=concert)\
.filter(contribution_def__left__gt=0)\
.filter(contribution_def__type_of='ticket')
Y luego otra vez al día mi contexto
context['contributions'] = contributions
así que me preguntaba si tener ninguna manera puedo evitar la repetición de mi mismo, para volver a evaluar las contribuciones de modo que en realidad refleja los datos reales de la base de datos. Idealmente, modificaría las contribuciones del conjunto de pruebas y sus valores se actualizarían, y al mismo tiempo la base de datos reflejaría estos cambios, pero no sé cómo hacerlo.
ACTUALIZACIÓN: Esto es lo que hago entre los dos contexto [ 'contribuciones'] = contribuciones
agrego un nuevo objeto contribución a la contributions_chosen (esto es una relación M2M),
contribution = Contribution.objects.create(kwarg=something,kwarg2=somethingelse)
user_profile.contributions_chosen.add(contribution)
contribution.save()
user_profile.save()
Y en algunos casos i eliminar un objeto contribución contribución = user_profile.contributions_chosen.get (id = 1) user_profile.contributions_chosen.get (id = request.POST [ 'con contribution.delete()
Como puedes ver, estoy modificando la tabla contribuciones_por ejemplo, así que tengo que volver a enviar la consulta y actualizar el contexto. ¿Qué estoy haciendo mal?
ACTUALIZACIÓN Después de ver sus comentarios acerca de la evaluación, me doy cuenta de que eval queryset hago len (contribuciones) entre el contexto [ 'contribución'] y que parece ser un problema. Lo moveré después de las operaciones de la base de datos y eso es todo, gracias chico.
parece que no ha evaluado la queryset 'contributions', por lo tanto no hay necesidad de preocuparse por su actualización, ya que todavía tiene datos no obtienen de DB. 'QuerySet' se evalúa de forma diferida, por lo tanto, no tiene nada que ver con las filas de DB hasta que se haya evaluado. – okm