Filter 如何在django rest框架中过滤多个序列化程序

Filter 如何在django rest框架中过滤多个序列化程序,filter,django-rest-framework,Filter,Django Rest Framework,I jush有一个模型,其中有两个字段,一个是post,另一个是与django用户模型相关的外键。如下所示: from django.contrib.auth.models import User class Post(models.Model): post = models.CharField(max_length=20) author = models.ForeignKey(User, related_name='posts') class PostSerializer(

I jush有一个模型,其中有两个字段,一个是post,另一个是与django用户模型相关的外键。如下所示:

from django.contrib.auth.models import User

class Post(models.Model):
    post = models.CharField(max_length=20)
    author = models.ForeignKey(User, related_name='posts')
class PostSerializer(serializers.ModelSerializer):

    class Meta:
        model = Post
        fields = ('id', 'post', 'author')

class UserSerialzier(serializers.ModelSerializer):

    posts = PostSerializer()

    class Meta:
        model = get_user_model()
        fields = ('id', 'username', 'snippets', 'posts')
class UserDetail(generics.RetrieveAPIView):

    serializer_class = HomeSerializer

    def get_queryset(self):
        post_set = self.request.user.posts.filter(post='python')
        query_set = User.objects.filter(posts=post_set, username='admin')
        return query_set
    query_set = User.objects.filter(post__in=post_set, username='admin')
现在我在文章中定义了一个用户序列化器,如下所示:

from django.contrib.auth.models import User

class Post(models.Model):
    post = models.CharField(max_length=20)
    author = models.ForeignKey(User, related_name='posts')
class PostSerializer(serializers.ModelSerializer):

    class Meta:
        model = Post
        fields = ('id', 'post', 'author')

class UserSerialzier(serializers.ModelSerializer):

    posts = PostSerializer()

    class Meta:
        model = get_user_model()
        fields = ('id', 'username', 'snippets', 'posts')
class UserDetail(generics.RetrieveAPIView):

    serializer_class = HomeSerializer

    def get_queryset(self):
        post_set = self.request.user.posts.filter(post='python')
        query_set = User.objects.filter(posts=post_set, username='admin')
        return query_set
    query_set = User.objects.filter(post__in=post_set, username='admin')
我只想返回一个json,其中包含用户数据和post数据。但是,我想得到按条件过滤的post数据,而不是所有post数据,我的观点如下:

from django.contrib.auth.models import User

class Post(models.Model):
    post = models.CharField(max_length=20)
    author = models.ForeignKey(User, related_name='posts')
class PostSerializer(serializers.ModelSerializer):

    class Meta:
        model = Post
        fields = ('id', 'post', 'author')

class UserSerialzier(serializers.ModelSerializer):

    posts = PostSerializer()

    class Meta:
        model = get_user_model()
        fields = ('id', 'username', 'snippets', 'posts')
class UserDetail(generics.RetrieveAPIView):

    serializer_class = HomeSerializer

    def get_queryset(self):
        post_set = self.request.user.posts.filter(post='python')
        query_set = User.objects.filter(posts=post_set, username='admin')
        return query_set
    query_set = User.objects.filter(post__in=post_set, username='admin')
我希望得到结果:

{
    "id": 1, 
    "username": "rsj217", 
    "posts": [
        {
            "id": 1, 
            "post": "python", 
            "author": {
                "id": 1, 
                "username": "rsj217", 
            }
        }, 
        {
            "id": 2, 
            "post": "python", 
            "author": {
                "id": 1, 
                "username": "rsj217", 
            }
        }
    ]
}
但事实上,我得到的结果是这样的:

{
    "id": 1, 
    "username": "rsj217", 
    "posts": [
        {
            "id": 1, 
            "post": "python", 
            "author": {
                "id": 1, 
                "username": "rsj217", 
            }
        }, 
        {
            "id": 2, 
            "post": "python", 
            "author": {
                "id": 1, 
                "username": "rsj217", 
            }
        },
         {
            "id": 3, 
            "post": "ruby", 
            "author": {
                "id": 1, 
                "username": "rsj217", 
            }
        }
    ]
}

我无法过滤post字段ruby,我不知道哪里去了

我认为你检索查询集的方式是错误的。试着这样做:

from django.contrib.auth.models import User

class Post(models.Model):
    post = models.CharField(max_length=20)
    author = models.ForeignKey(User, related_name='posts')
class PostSerializer(serializers.ModelSerializer):

    class Meta:
        model = Post
        fields = ('id', 'post', 'author')

class UserSerialzier(serializers.ModelSerializer):

    posts = PostSerializer()

    class Meta:
        model = get_user_model()
        fields = ('id', 'username', 'snippets', 'posts')
class UserDetail(generics.RetrieveAPIView):

    serializer_class = HomeSerializer

    def get_queryset(self):
        post_set = self.request.user.posts.filter(post='python')
        query_set = User.objects.filter(posts=post_set, username='admin')
        return query_set
    query_set = User.objects.filter(post__in=post_set, username='admin')
我的模型是author=models.ForeignKeyUser,related_name='posts',related_name是posts。当我更改post_集时,它不起作用。