使用django左键加入到最新的一行。

问题描述 投票:-1回答:1

我有两个表。产品[id,名称,类别]销售[产品,日期,价格]。

我想从Sales中获取每一个产品的最新行。如果在sales中没有记录,我仍然想获得该产品的记录。这些行是外键相关的。

Django有什么方法可以实现这样的左连接?

mysql django django-orm
1个回答
1
投票

也许你可以使用 Subquery:

from django.db.models import Subquery, OuterRef

sales = Sales.objects.filter(product=OuterRef('pk')).order_by('-date')
products = Product.objects.annotate(latest_sale = Subquery(sales.values('price')[:1]))

0
投票

你可以在视图中获取销售对象,并在模板中渲染该对象,例如你可以这样做。

模型.py

class Course(models.Model):

  name = models.CharField(max_length=100)
  category = models.CharField(max_length=100)


def __str__(self):
    return self.title

class Sales(models.Model):

  product = models.ForeignKey(Course, on_delete=models.CASCADE, null=True)
  price = models.IntegerField()
  date = models.DateTimeField(auto_now_add=True, null=True)

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

视图.py

order_by(-date) 从数据库中获取最新的项目。

def sales_view(request):

   sales = Sales.objects.all().order_by(-date)

return render(request, 'template.html', {'sales':sales})

现在,在你的模板中,你可以加载模板。

{% for sale in sales %}

  {{sale.product.name}}
  {{sale.price}}
  {{sale.date}}

{% endfor %}

这样,即使没有销售对象,你也能得到产品对象。希望你能从中得到一些启发。

© www.soinside.com 2019 - 2024. All rights reserved.