python - variable - plantillas django
Django: compruebe si un objeto ya existe antes de agregar (5)
Hay una función de ayuda para este idioma llamado ''get_or_create'' en su administrador de modelos:
role, created = UserToUserRole.objects.get_or_create(
from_user=current_user, to_user=user, role=''follow'')
Devuelve una tupla de (modelo, bool) donde "modelo" es el objeto en el que está interesado y "bool" le dice si tuvo que ser creado o no.
Esta es una pregunta bastante simple de Django, pero no puedo encontrar la respuesta en los documentos de Django, ¡a pesar de mucha caza!
¿Cómo verifico si un objeto ya existe y solo lo agrego si no existe?
Aquí está el código: no quiero agregar el follow_role dos veces en la base de datos si ya existe. ¿Cómo verifico primero? Utilice get () tal vez, pero ¿se quejará Django si get () no devuelve nada?
current_user = request.user
follow_role = UserToUserRole(from_user=current_user, to_user=user, role=''follow'')
follow_role.save()
¡Gracias!
Puedes usar get (), pero tendrás que envolverlo con try-except de este modo:
try:
obj = UserToUserRole.objects.get(from_user=current_user, to_user=user, role=''follow'')
except UserToUserRole.DoesNotExist:
# here write a code to create a new object
Si buscas un valor bool
UserToUserRole.objects.filter(
from_user=current_user, to_user=user, role=''follow''
).exists()
Si desea que se realice la comprobación cada vez que se guarde, puede utilizar la señal de guardado previo para consultar http://docs.djangoproject.com/en/dev/ref/signals/#django.db.models.signals.pre_save
Alternativamente, en el modelo puede especificar unique = True para la propiedad que determina si un elemento es el mismo elemento, esto provocará que se lance una Exception (django.db.IntegrityError) si intenta guardar lo mismo nuevamente.
Si tiene más de un campo que hace que algo sea único, deberá usar unique_together en la clase interna de Meta unique_together
Si está usando una versión reciente de Django, puede usar la opción unique_together para el modelo UserToUserRole, y luego usar el método get_or_create () que mostró Joe Holloway. Esto garantizará que no pueda obtener un duplicado.