0

У меня есть API, и для этого я использую Django Rest Framework. У меня есть модель, и я получаю некоторые данные через API для хранения в БД с помощью моделей сериализаторов модели &.Django: Пользовательское сопоставление полей для ModelSerializer

Моя проблема заключается в том, что имена столбцов в таблице MySQL отличаются от данных, которые я получаю при размещении API. например:

данных Got через API:

{ 
    "a": "b", 
    "c": "d", 
    "e": "f", 
} 

И моя модель, как показано ниже:

class Table(models.Model): 
    x = models.CharField(max_length=25,primary_key=True) 
    y = models.CharField(max_length=25) 
    z = models.CharField(max_length=25) 

Serializer:

class TableSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Table 
     fields = ('x', 'y', 'z') 

Как я могу карте a -> x, b -> y, c -> z ?

+0

Как насчет нового сериализатора с a, b, c и картой в методе создания? – ilse2005

ответ

1

В классе TableSerializer, вы можете создать отображение вручную:

class TableSerializer(serializers.ModelSerializer): 
    a = models.CharField(source='x', max_length=25, primary_key=True) 
    b = models.CharField(source='y', max_length=25) 
    c = models.CharField(source='z', max_length=25) 

    class Meta: 
     model = Table 
     fields = ('a', 'b', 'c') 

При возврате экземпляра таблицы, в x, y и z свойства будут сериализовать a, b и c. Аналогичным образом, когда вы получаете данные через свой API, поля будут отображаться наоборот.

Вы получите некоторую информацию о source в подходе DRF docs

ilse2005 работает: вы можете переопределить метод создания в вашем сериализаторе и сделать отображение все самостоятельно, но добавив параметр source в ваших полях Serializer, это позволит вам легко создавать, обновлять и возвращать Table экземпляров.

Смежные вопросы