【发布时间】:2020-07-23 20:34:11
【问题描述】:
我正在尝试过滤不在我的模型上的序列化值,但我无法理解这一点。
这是我的 model.py :
class Post(models.Model):
post_id_number=models.AutoField(primary_key=True)
variable_1 = models.CharField(max_length=50)
variable_2 = models.CharField(max_length=50)
variable_3 = models.CharField(max_length=50)
这是我的 Views.py :
class PostViewSet(viewsets.ModelViewSet):
serializer_class = PostSerializers
queryset = Post.objects.all()
filterset_class = PostFilter
这是我的 serializers.py:
class PostSerializers(serializers.ModelSerializer):
variable_not_in_the_model = serializers.SerializerMethodField()
class Meta:
model = Post
fields = ('post_id_number',
'variable_1',
'variable_2',
'variable_3',
'variable_not_in_the_model',
)
def get_variable_not_in_the_model(self, instance):
return instance.variable_1 + ' ' + instance.variable_2 + ' ' + instance.variable_3
这是我的实际 filters.py :
from .models import Post
import django_filters
class PostFilter(django_filters.FilterSet):
class Meta:
model = Post
fields = {
'variable_1': ['icontains'],
'variable_2': ['icontains'],
'variable_3': ['icontains']
}
这是我希望我的 filters.py 看起来的样子,但它不起作用:
from .models import Post
import django_filters
class PostFilter(django_filters.FilterSet):
class Meta:
model = Post
fields = {
'variable_not_in_the_model': ['icontains']
}
有没有办法可以过滤序列化变量而不是模型变量?
非常感谢您的帮助!
【问题讨论】:
-
过滤过程发生在数据库级别,针对现有的数据库字段(或注释字段)。因此,您不能针对 非模型字段 进行过滤
-
谢谢,我不知道!
标签: django django-rest-framework django-filter