【发布时间】:2018-09-04 14:41:43
【问题描述】:
我正在尝试修改我的 get_queryset 结果
这是我的过滤器、视图和序列化器
view.py
class AccountDetailFilter(filters.FilterSet):
product_key = filters.CharFilter(name='product__product_name')
account_name = filters.AllValuesFilter(name='account__account_key')
service_provider_name = filters.CharFilter(name='product__service_provider__service_provider_name', )
allocation_key = filters.CharFilter(name='account__account_allocation__allocation_key')
class Meta:
model = BillingLine
fields = ('product_key', 'account_name', 'service_provider_name', 'allocation_key')
class AccountDetailList(generics.ListAPIView):
serializer_class = BillingSerializer
filter_backends = (DjangoFilterBackend,)
filter_class = AccountDetailFilter
def get_queryset(self):
now = datetime.datetime.now()
start_date = self.kwargs.get('start_date_time', now)
end_date = self.kwargs.get('end_date_time', now)
serializer = BillingSerializer(data={'start_date': start_date, 'end_date': end_date})
serializer.is_valid(raise_exception=True)
queryset = BillingLine.objects.select_related().filter(start_date__gte=start_date, end_date__lte=end_date)
queryset = queryset.order_by('-id')
print(queryset.count())
return queryset
Serializers.py
class BillingSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
start_date = serializers.DateTimeField()
end_date = serializers.DateTimeField()
account_key = serializers.CharField(source='account_id',required=False)
product_key = serializers.CharField(source='product_id',required=False)
total_amount = serializers.FloatField(required=False)
检索结果(即get_queryset)后,我需要修改/添加结果中的数据。有没有办法做到这一点。
我们还可以从结果查询集中获取其他字段值到序列化程序。因为queryset = BillingLine.objects.select_related().filter(start_date__gte=start_date, end_date__lte=end_date) 正在返回几乎所有数据(特别是产品表中的产品名称)
【问题讨论】:
-
将所有键添加到从视图查询集返回的序列化程序中
-
@AnupYadav 我已经在查询返回的序列化程序中添加了字段。但它不起作用。只有主表中的字段在结果集中返回
-
是的,您需要在类级别而不是 META 类中定义
field_name = serializers.IntegerField()和field_name = serializers.CharField()。并且需要将这些字段添加到fields或extra_fields = ('field_name','so on...') -
@AnupYadav 我已经添加了
-
fields或extra_fields = ('field_name','so on...')?您的问题缺少此部分
标签: django python-3.x django-models django-rest-framework