簡體   English   中英

Django select 與每個結果的最大字段值相關

[英]Django select related with max field value for each result

我有兩個模型。

模型.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)

讓我解釋一下為什么在有人發布不同的解決方案之前我有兩個模型。 這個想法是有一個股票歷史。 當我展示所有飲料時,我只需要展示它們的最后一個相關stockdate最晚的那個)。

視圖.py

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

但是我怎樣才能得到最新date的每種drink的相關stock

如果您在 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') 反轉順序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM