Sreekar Mouli
Sreekar Mouli

Reputation: 1432

Django Rest Framework - How to POST foreign keys in ListCreateAPIView

Post model

class Post(models.Model):
    owner = models.ForeignKey(Profile, on_delete=models.CASCADE) # Profile is another model
    title = models.CharField(max_length=300)
    content = models.CharField(max_length=1000)
    votes = models.IntegerField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    subreddit = models.ForeignKey(Subreddit, on_delete=models.CASCADE) # Subreddit is another model

PostSerializer

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'
        depth = 1

ListPostsOfReddit

class ListPostsOfReddit(ListCreateAPIView):
    serializer_class = PostSerializer

    def get_queryset(self):
        return Post.objects.filter(subreddit__name=self.kwargs['r_name'])

In the ListCreateAPIView of rest-framework, I am able to GET all the foreign key data. In the form that rest-framework provides, only the

are asked, I want the foreign key fields to be also asked as input. How do I achieve that?

Upvotes: 2

Views: 421

Answers (1)

JPG
JPG

Reputation: 88499

Use Two serializers, and manage those in get_serializer() method.

class PostListSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'
        depth = 1


class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'


class ListPostsOfReddit(ListCreateAPIView):
    def get_serializer_class(self):
        if self.request.method == 'GET':
            return PostListSerializer
        return PostSerializer

    def get_queryset(self):
        return Post.objects.filter(subreddit__name=self.kwargs['r_name'])


Note: I didn't tested/verified the solution. Please let me know if any error occured

Upvotes: 3

Related Questions