如何通过一个查询从两个表中获取数据

问题描述

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

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

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

这是我目前的结果。

as you can see in the image address city and state is missing

我的模特: 订单型号:

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,null=True)
    order = models.ForeignKey(
        Order,on_delete=models.SET_NULL,null=True)
    quantity = models.IntegerField(default=0,blank=True)
    date_orderd = models.DateTimeField(auto_Now_add=True)
    user = models.ForeignKey(
        User,null=True)
    price = models.FloatField(blank=True,null=True)

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

送货地址模型:

class ShippingAddress(models.Model):
    user = models.ForeignKey(
        User,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在一个查询中从多个表中选择”。您可以查看答案here

,

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

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

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

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