How to display all model fields with ModelSerializer? How to display all model fields with ModelSerializer? python python

How to display all model fields with ModelSerializer?


According to the Django REST Framework's Documentation on ModelSerializers:

By default, all the model fields on the class will be mapped to a corresponding serializer fields.

This is different than Django's ModelForms, which requires you to specify the special attribute '__all__' to utilize all model fields. Therefore, all that is necessary is to declare the model.

class CarSerializer(ModelSerializer):    class Meta:        model = Car

Update (for versions >= 3.5)

The behaviour described above was deprecated in version 3.3, and forbidden since version 3.5.

It is now mandatory to use the special attribute '__all__' to use all fields in the Django REST Framework, same as Django Forms:

Failing to set either fields or exclude raised a pending deprecation warning in version 3.3 and raised a deprecation warning in 3.4. Its usage is now mandatory.

So now it must be:

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


You could use fields = '__all__' to get all your fields or you could specify if you want a limited number of fields to be returned. See documentation.

But this returns the id value for the foreign key field i.e. producer in your case. To get all the fields for producer, you need to create a serializer class for that too. See here.

So your updated serializers.py should be:

class ProducerSerializer(ModelSerializer):    class Meta:        model = Producerclass CarSerializer(ModelSerializer):    producer= ProducerSerializer(read_only=True)    class Meta:        model = Car        fields = ('producer', 'color', 'car_model', 'doors', )


if you want all fields to be included in the serializer you can use fields ='_ all _'

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

but this approach is not recommended. we should always explicitly specify all fields. this is because it gives us control over fields displayed. if we don't want a fields data to be displayed we can avoid that.

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