Filter 如何在django rest框架中过滤多个序列化程序
I jush有一个模型,其中有两个字段,一个是post,另一个是与django用户模型相关的外键。如下所示: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(
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_集时,它不起作用。