0

Как отобразить все поля модели с помощью ModelSerializer?

13

Описание проблемы

У меня есть модель Car, определенная в файле models.py, которая выглядит следующим образом:

class Car():
    producer = models.ForeignKey(Producer, blank=True, null=True,)
    color = models.CharField()
    car_model = models.CharField()
    doors = models.CharField()

Также я создал сериализатор CarSerializer в файле serializers.py:

class CarSerializer(ModelSerializer):

    class Meta:
        model = Car
        fields = Car._meta.get_all_field_names()

Проблема в том, что при попытке использовать все поля я получаю ошибку:

Field name producer_id is not valid for model Car.

Я ожидаю, что сериализатор будет работать с указанными полями, но вместо этого получаю данное сообщение об ошибке.

Как я могу исправить эту ошибку и правильно использовать все поля в моем сериализаторе?

Спасибо!

1 ответ(ов)

0

Если вы хотите, чтобы все поля были включены в сериализатор, вы можете использовать fields = '__all__':

class CarSerializer(serializer.ModelSerializer):
    class Meta:
        fields = '__all__'
        model = Car

Однако этот подход не рекомендуется. Мы всегда должны явно указывать все поля. Это дает нам контроль над отображаемыми полями. Если мы не хотим, чтобы данные какого-либо поля отображались, мы можем просто не включать его.

class CarSerializer(serializer.ModelSerializer):
    class Meta:
        fields = ['name', 'color', 'company', 'price', ]
        model = Car

Таким образом, явное указание полей повышает читаемость кода и уменьшает вероятность случайного отображения лишней или конфиденциальной информации.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь