Salman Ahmed
Salman Ahmed

Reputation: 682

Serializing an array of data on the basis of foreign key django rest framework

I am using django rest framework to post property_id in favorites table as a foreign key and on the basis of foreign key i want to get all fields from property table.

class Favorites(models.Model):
    """Store favorite property"""

    user_id = models.ForeignKey(User, on_delete=models.CASCADE)
    property_id = models.ForeignKey(Property, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True, blank=True)

Serializer:

class FavoriteSerializer(serializers.ModelSerializer):
    """Favorite Properties serializer"""

    class Meta:
        model = Favorites
        fields = ('user_id','property_id', )

Viewset:

class FavoriteViewSet(viewsets.ModelViewSet):

    http_method_names = ['get','post' ]
    serializer_class = FavoriteSerializer
    queryset = Favorites.objects.all()

Output: enter image description here

This is my first output. then i sync my property Serializer and get this one:

enter image description here

This is the output i need but it creates problem during post. During post i only need user_id and property_id but it makes my post form like this:

enter image description here

Any suggestions how i can achieve my results?

Upvotes: 2

Views: 1192

Answers (1)

Ykh
Ykh

Reputation: 7717

serializers.py

class FavoriteCreateSerializer(serializers.ModelSerializer):
    """Favorite Properties serializer"""

    class Meta:
        model = Favorites
        fields = ('user_id','property_id', )

class FavoriteListSerializer(serializers.ModelSerializer):
    property_id = PropertySerializer(read_only=True)

    class Meta:
        model = Favorites
        fields = ('user_id','property_id', )

views.py

class FavoriteViewSet(viewsets.ModelViewSet):

    http_method_names = ['get','post' ]
    serializer_class = FavoriteSerializer
    queryset = Favorites.objects.all()

    def get_serializer_class(self):
            if self.action == 'create':
                return FavoriteCreateSerializer
            else:
                return self.serializer_class

Upvotes: 2

Related Questions