在阅读了django文档和django rest框架文档之后,我遇到了无法解决的错误,即使我阅读了stackoverflow的所有相关问题,我仍然无法解决它。你知道吗
完整的错误消息如下:
AttributeError at /api/v1/task/target/subdomain/get_by_target/
Got AttributeError when attempting to get a value for field `target_id` on serializer `TargetSubdomainSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `tuple` instance.
Original exception text was: 'tuple' object has no attribute 'target_id'.
我想在我的表中得到distinct结果,所以我使用django filter和distinct,当我只使用filter时,代码运行正确,但是当我同时使用filter和values\u list时,它会出错。你知道吗
TargetSubdomain模型如下:
class TargetSubdomain(models.Model):
target_id = models.IntegerField(help_text='目标ID')
domain = models.CharField(max_length=200, help_text='域名')
source = models.CharField(max_length=20, help_text='子域名来源')
created_at = models.BigIntegerField(default=0, help_text='创建时间')
updated_at = models.BigIntegerField(default=0, help_text='更新时间')
def save(self, **kwargs):
if not self.id:
self.created_at = int(time.time())
self.updated_at = int(time.time())
super(TargetSubdomain, self).save()
class Meta:
db_table = 'nw_target_subdomain'
TargetSubdomainSerializer如下所示:
class TargetSubdomainSerializer(serializers.ModelSerializer):
class Meta:
model = TargetSubdomain
fields = '__all__'
TargetSubdomainViewSet如下所示:
class TargetSubdomainViewSet(viewsets.ModelViewSet):
queryset = TargetSubdomain.objects.all().order_by('-id')
serializer_class = TargetSubdomainSerializer
@action(methods=['GET'], detail=False, url_name='get_by_target')
def get_by_target(self, request):
target_id = request.GET.get('targetId')
# queryset = TargetSubdomain.objects.filter(target_id=target_id).values_list('id', 'target_id', 'domain').distinct()
queryset = TargetSubdomain.objects.filter(target_id=target_id)
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
response = {
'results': serializer.data
}
headers = self.get_success_headers(serializer.data)
return Response(response, status=status.HTTP_200_OK, headers=headers)
当queryset来自queryset = TargetSubdomain.objects.filter(target_id=target_id)
时,代码没有eror,但是当我尝试使用# queryset = TargetSubdomain.objects.filter(target_id=target_id).values_list('id', 'target_id', 'domain').distinct()
获得不同的结果时,它将引发属性错误。你知道吗
values_list
查询集的行为类似于元组列表,因此每个元组没有target_id
属性。在这种情况下,为什么要使用值列表?如果您试图对提供给值列表的那些字段获取unqiue,您可以使用distinct(*fields)
。但只适用于PostgresSQL。否则,根据您的第一个查询集获取所有这些内容,然后在Python中执行重复数据消除。你知道吗https://docs.djangoproject.com/en/2.2/ref/models/querysets/#distinct
相关问题 更多 >
编程相关推荐