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.

Cómo usar diferentes nombres de clave en MongoDB mientras se trabaja con Django?

Estoy trabajando en el desarrollo de un microservicio utilizando Django, donde utilizo MongoDB como backend.

Las personas que escribieron el código principal utilizaron Java, por lo tanto, los datos ya presentes en las colecciones de MongoDB siguen el patrón de camelcase, por ejemplo, el nombre clave es firstName.

Ahora, mientras trabajo con Python, me gusta nombrar mis variables y funciones utilizando el snake casing, como first_name y get_first_name().

Lo que quiero es que dentro del código quiero referirme al primer nombre como first_name en todas partes, pero al guardar/actualizar el primer nombre en la base de datos y al devolver la respuesta JSON de los datos del usuario, quiero devolverlo como firstName.

¿Hay alguna forma de lograr este comportamiento? ¡Por favor, ayúdame!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible lograr este comportamiento en su microservicio de Django. Puede utilizar el atributo db_column incorporado en Django para especificar el nombre de la columna de MongoDB al definir el campo en su modelo de Django. Por ejemplo, puede definir su modelo de usuario de la siguiente manera:

    from django.db import models
    
    class User(models.Model):
        first_name = models.CharField(max_length=50, db_column='firstName')
        # otros campos...
    

    En este caso, Django mapeará el campo first_name a la columna de MongoDB llamada firstName. De esta manera, puede referirse a first_name en su código Python al guardar y recuperar datos, pero el nombre real de la columna en la base de datos será firstName.

    De manera similar, al devolver respuestas JSON, puede utilizar los serializadores de Django Rest Framework y definir un SerializerMethodField para convertir first_name a firstName. Por ejemplo:

    from rest_framework import serializers
    
    class UserSerializer(serializers.ModelSerializer):
        firstName = serializers.SerializerMethodField()
    
        class Meta:
            model = User
            fields = ('first_name', 'firstName', )
    
        def get_firstName(self, obj):
            return obj.first_name
    

    En este caso, el método get_firstName devolverá el campo first_name como firstName en la respuesta JSON. También puede agregar otros campos al serializador y convertirlos a las convenciones de nomenclatura deseadas utilizando el SerializerMethodField.

    En general, al utilizar las características incorporadas en Django, puede lograr fácilmente las convenciones de nomenclatura deseadas para su microservicio de Django al interactuar con MongoDB.

Comments are closed.