Python 使用Queryset将具有特定外键的用户与密钥匹配时出现元组错误
我正在尝试创建一个api,该api返回满足以下要求的订单:Status=ready,没有其他驱动程序拾取它,并且驱动程序被分配到该地点。驱动程序应该只能查看来自其指定位置的订单。每次调用api时,我都会收到这样的错误:“tuple”对象不可调用 如何正确地在JsonResponse中格式化和返回查询中的所有项?我不理解这个错误 这是查询的结果Python 使用Queryset将具有特定外键的用户与密钥匹配时出现元组错误,python,django,tuples,Python,Django,Tuples,我正在尝试创建一个api,该api返回满足以下要求的订单:Status=ready,没有其他驱动程序拾取它,并且驱动程序被分配到该地点。驱动程序应该只能查看来自其指定位置的订单。每次调用api时,我都会收到这样的错误:“tuple”对象不可调用 如何正确地在JsonResponse中格式化和返回查询中的所有项?我不理解这个错误 这是查询的结果 TypeError at /api/driver/orders/ready/ 'tuple' object is not callable /apis
TypeError at /api/driver/orders/ready/
'tuple' object is not callable
/apis.py in driver_get_ready_orders
@csrf_exempt
def driver_get_ready_orders(request):
driver = CustomJWTAuthenticator().authenticate(request)[0].driver
queryset = Order.objects.filter(
status=Order.READY, driver=None).order_by("-id"),
if driver.dispensary:
queryset = queryset(dispensary=driver.dispensary ...
)
orders = Order.objects.filter(
queryset,
many=True,
context={"request": request}
▶ Local vars
Variable Value
driver
<Driver: Malcom Brooks>
queryset
(<QuerySet [<Order: 10>, <Order: 8>]>,)
request
<WSGIRequest: GET '/api/driver/orders/ready/?
订单和驱动程序型号:
class Order(models.Model):
PICKING = 1
READY = 2
ONTHEWAY = 3
DELIVERED = 4
CANCELED = 5
STATUS_CHOICES = (
(PICKING, "Your Order Is Being Picked Right Off The Plant!"),
(READY, "Picked, Weighed, And Ready For Delivery."),
(ONTHEWAY, "The Best Bud Is Heading Straight To Your Door."),
(DELIVERED, "Delivered"),
(CANCELED, "Canceled/Refunded")
)
address = models.CharField(max_length=500)
customer = models.ForeignKey(CustomerDetails, on_delete=models.CASCADE)
dispensary = models.ForeignKey(Dispensary, on_delete=models.CASCADE)
driver = models.ForeignKey(
Driver, blank=True, null=True, on_delete=models.CASCADE)
status = models.IntegerField(choices=STATUS_CHOICES)
def __str__(self):
return str(self.id)
class Driver(models.Model):
Active_License = (
('License_Status', (
('active', 'Active'),
('suspended', 'Suspended')
)),
)
address = models.CharField(max_length=500, blank=True)
name = models.CharField(max_length=500, default='')
phone = models.CharField(max_length=500, blank=True)
photo = models.ImageField(
upload_to='driver_photos/', blank=False, default='')
user = models.OneToOneField(
User, on_delete=models.CASCADE, related_name='driver')
dispensary = models.ForeignKey(
Dispensary, null=True, blank=True, on_delete=models.CASCADE)
def __str__(self):
return self.user.get_full_name()
这里有三个问题:
queryset
不可调用,因此queryset=queryset(药房=司机.药房)
无效李>
.filter(queryset)
进行筛选。您可能希望在此处使用序列化程序:# no trailing comma
queryset = Order.objects.filter(status=Order.READY, driver=None).order_by('-id')
if driver.dispensary:
queryset = queryset.filter(dispensary=driver.dispensary)
orders = OrderSerializer(queryset, many=True)
#无尾随逗号
queryset=Order.objects.filter(status=Order.READY,driver=None)。Order_by('-id'))
如果是司机、药房:
queryset=queryset.filter(药房=司机.药房)
orders=OrderSerializer(queryset,many=True)
# no trailing comma
queryset = Order.objects.filter(status=Order.READY, driver=None).order_by('-id')
if driver.dispensary:
queryset = queryset.filter(dispensary=driver.dispensary)
orders = OrderSerializer(queryset, many=True)