【问题标题】:How to get data from two table through one query Django如何通过一个查询Django从两个表中获取数据
【发布时间】:2020-12-12 14:29:16
【问题描述】:

** 我只需要在查询中再加入一个表 ** 我想获得具有订单详细信息和送货地址的登录用户的销售额。 我正在通过此查询获得当前用户的销售额,但我也想获得送货地址。

orderitems = OrderItem.objects.filter(
    product__user=request.user, order__complete=1).order_by('-date_orderd')

现在我还想从 Shippingaddress 模型中获取地址、城市和州。 我附上了下面的模型。

这是我目前的结果。

我的模型: 订购型号:

class Order(models.Model):
    user = models.ForeignKey(
        User, on_delete=models.CASCADE, blank=True, null=True)
    date_orderd = models.DateTimeField(auto_now_add=True)
    complete = models.BooleanField(default=False, null=True, blank=False)
    transaction_id = models.CharField(max_length=200, null=True)
    # product = models.ManyToManyField(OrderItem)

    def __str__(self):
        return str(self.id)

订购商品型号:

class OrderItem(models.Model):
    product = models.ForeignKey(
        Product, on_delete=models.CASCADE, blank=True, null=True)
    order = models.ForeignKey(
        Order, on_delete=models.SET_NULL, blank=True, null=True)
    quantity = models.IntegerField(default=0, null=True, blank=True)
    date_orderd = models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(
        User, on_delete=models.SET_NULL, blank=True, null=True)
    price = models.FloatField(blank=True, null=True)

    def __str__(self):
        return str(self.product)

送货地址型号:

class ShippingAddress(models.Model):
    user = models.ForeignKey(
        User, on_delete=models.CASCADE, blank=True, null=True)
    order = models.ForeignKey(
        Order, on_delete=models.CASCADE, blank=True, null=True)
    name = models.CharField(max_length=150)
    address = models.CharField(max_length=150)
    city = models.CharField(max_length=150)
    state = models.CharField(max_length=150)
    zipcode = models.CharField(max_length=150)
    date_orderd = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.address

【问题讨论】:

    标签: django django-templates django-orm


    【解决方案1】:

    您正在寻找的是“使用 Django 在一个查询中从多个表中选择”。你可以看看答案here

    【讨论】:

    • 感谢您的回复。但我的情况有点不同。具有订单 ID 外键的送货地址模型。它们之间没有直接关系。订单项和送货地址模型。请检查我的模型。如何在一个查询中访问这两个表的值?
    【解决方案2】:

    为什么不添加另一个像下面这样的查询

    shp_address = ShippingAddress.objects.filter(product__user=request.user)
    

    如果需要作为上下文的一部分发送到客户端,请参见下文

    context = {
            'orderitems':  orderitems,
            'shp_address': shp_address
    }
    
    

    【讨论】:

    • 我也试过这样address = ShippingAddress.objects.filter( order__in=Subquery(orderitems.values('order'))).order_by('-date_orderd') detail = zip(order, orderitems, address)。但在模板上,它正在从表中获取所需的值,但没有获得完整的行。
    • (1) ShippingAddress 应该与User 相关联,而不是与Order 相关联。 (2) 为什么每个OrderItem 都需要存储用户ID。最后,是否正在尝试获取特定用户的送货地址?
    • 其实我想得到卖家的销量。我有一个多供应商系统,有不同的用户(卖家和买家)。实际上,OrderItem 中的user_id 是已购买商品的人。使用此查询orderitems = OrderItem.objects.filter( product__user=request.user, order__complete=1).order_by('-date_orderd') 我得到了完整的销售,但我也想从送货地址获取address,state,'zip`。我尝试了不同的方式,但没有得到正确的结果。请帮我 。谢谢
    • 可能是您在上面编辑您的问题并提供更多详细信息。其次,由于OrderItemShippingAddress 之间没有关系,如果用户有多个送货地址,您将无法将其与正确的 OrderItem 关联。
    • 其实我也面临同样的问题。如果与 1 个 ShippingAddress 相关的 orderitems 超过 1 个,则仅显示 1 个 orderitem。我该如何解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多