【问题标题】:Django select related with max field value for each resultDjango 选择与每个结果的最大字段值相关
【发布时间】:2020-04-05 23:16:36
【问题描述】:

我有两个模型。

models.py:

class Drink(models.Model):
    account = models.ForeignKey(Account, null=False, on_delete=models.CASCADE)
    name = models.CharField(max_length=100, null=False, blank=False)
    # some other fields that don't matter now...


class DrinkStock(models.Model):
    ingredient = models.ForeignKey(Ingredient, null=False, on_delete=models.CASCADE)
    quantity = models.DecimalField(max_digits=14, decimal_places=3, null=False, default=0.000)
    date = models.DateTimeField(auto_now_add=True)

在有人发布不同的解决方案之前,让我解释一下为什么我有两个模型。 这个想法是有一个股票历史。当我展示所有饮料时,我只需要展示它们最后一个相关的stock(最新的date)。

views.py

def drinks(request):
    drinks = Drink.objects.select_related('stock').filter(account__id=request.session['account_id'])

但是如何将每个drink 的相关stock 附加到最新的date

【问题讨论】:

  • 听起来像是多态关联

标签: python django django-queryset


【解决方案1】:

如果您在 DrinkStock 中设置外键关系:

drink = models.ForeigKey(Drink, ... , related_name='drinkstock')

您应该能够迭代视图中的饮料并获得日期最晚的饮料。代码应该类似于:

def drinks(request):
drinks = Drink.objects.select_related('stock').filter(account__id=request.session['account_id'])
drinks_with_latest_date = [drink.drinkstock.all().order_by('date').first() for drink in drinks]

drinks_with_latest_date 应该返回所需的结果。你可以 order_by('-date') 来颠倒顺序

【讨论】:

    猜你喜欢
    • 2016-06-08
    • 2017-06-29
    • 2016-12-11
    • 2018-07-15
    • 2022-09-27
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多