Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Queryset将具有特定外键的用户与密钥匹配时出现元组错误_Python_Django_Tuples - Fatal编程技术网

Python 使用Queryset将具有特定外键的用户与密钥匹配时出现元组错误

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

我正在尝试创建一个api,该api返回满足以下要求的订单:Status=ready,没有其他驱动程序拾取它,并且驱动程序被分配到该地点。驱动程序应该只能查看来自其指定位置的订单。每次调用api时,我都会收到这样的错误:“tuple”对象不可调用

如何正确地在JsonResponse中格式化和返回查询中的所有项?我不理解这个错误

这是查询的结果

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)