es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Modelos de Django: Guardar columna basándose en la clave principal cuando se envía una publicación.

Este es mi model.py

class AppointmentMaster(models.Model):
    id = models.AutoField(primary_key=True)
    user_key = models.CharField(max_length=30, blank=True, unique=True)
    phone_number = models.CharField(max_length=20, blank=True, null=True)
    email = models.CharField(max_length=20, blank=True, null=True)
@receiver(post_save, sender=AppointmentMaster)
def generate_AppointmentMaster_unique_key(sender, instance, created, **kwargs):
    post_save.disconnect(generate_AppointmentMaster_unique_key, sender=MenstrualHistory)
    instance.user_key = "USER-{}".format(instance.id)
    instance.save()
    post_save.connect(generate_AppointmentMaster_unique_key, sender=AppointmentMaster)
# Y estoy usando viewsets.ModelViewSet para obtener los detalles de la publicación. Quiero guardar user_key automáticamente al crear una nueva fila desde la API de publicación.

Quiero obtener la siguiente salida:

{
   "id": 1,
   "user_key": "USER-1",
   "phone_number": "90000000",
   "email": "abc@gmail.com"
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para guardar automáticamente la clave de usuario al crear una nueva fila desde la API de publicaciones, puede modificar el manipulador de señal generate_AppointmentMaster_unique_key para establecer el campo user_key basado en el ID de la instancia:

    @receiver(post_save, sender=AppointmentMaster)
    def generate_AppointmentMaster_unique_key(sender, instance, created, **kwargs):
        if created:
            instance.user_key = f'USER-{instance.id}'
            instance.save()
    

    Este manipulador de señal se activa cuando se guarda una instancia de AppointmentMaster. Si el argumento created es True, significa que se acaba de crear una nueva instancia (en lugar de actualizar una instancia existente). En ese caso, establecemos el campo user_key en 'USER-' seguido del ID de la instancia y guardamos la instancia.

    Con esta modificación, al crear una nueva instancia de AppointmentMaster a través de la API de publicaciones, el campo user_key se establecerá automáticamente en 'USER-' seguido de su ID. La salida de la solicitud de publicación tendrá el formato que especificaste:

    {
        "id": 1,
        "user_key": "USER-1",
        "phone_number": "90000000",
        "email": "abc@gmail.com"
    }
    

Comments are closed.