繁体   English   中英

Django Rest 框架:get_queryset 返回“详细信息”:“未找到”

[英]Django Rest Framework : get_queryset returns 'detail': 'Not found'

嗨,我有 API 需要使用子查询执行连接表并返回查询集。 当我打印查询集时,它会打印一个包含一个 object 的查询集,但返回 404 'detail': 'Not Found' 错误。

我在 URL 中获取客户 id,我必须查询客户表以获取相应的 address_id 并从 Address 表中发送 address_id 的地址详细信息。

下面是型号

class Customer(models.Model):
    customer_id = models.AutoField(primary_key = True, auto_created = True)
    first_name = models.CharField(max_length = 45)
    last_name = models.CharField(max_length = 45)
    address_id = models.ForeignKey('Address', db_column = 'address_id', on_delete = models.CASCADE)

class Address(models.Model):
   address_id = models.AutoField(primary_key = True)
   district = models.CharField(max_length = 20 )
   postal_code = models.CharField(max_length = 10 , blank=True)
   phone = models.CharField(max_length = 20)

下面是视图

class AddressDetail(generics.RetrieveUpdateDestroyAPIView):

    lookup_url_kwarg = "customer_id"
    serializer_class = AddressSerializer
    
    def get_queryset(self):
        
        cust_id = self.kwargs['customer_id']
        
        customer_addr_id = Customer.objects.filter(customer_id = cust_id)
        return Address.objects.filter(address_id__in=customer_addr_id.values('address_id'))
        

下面是 url

path('<int:customer_id>/address',views.AddressDetail.as_view())

我可以在查询集中打印并查看 object,但在客户端得到响应“未找到”。 如果我错过了什么,请告诉我。

QuerySet.values()返回一个类似字典的 object,所有键都设置为字符串“address_id”,值设置为“address_id”值,要检查地址是否存在,可以使用values_list代替。

# also you can chain `.distinct()` in the end
Address.objects.filter(address_id__in=customer_addr_id.values_list('address_id', flat=True))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM