簡體   English   中英

僅查詢具有關系的對象的 PostgreSQL 數據庫(使用 Django)

[英]Querying PostgreSQL database (with Django) for only objects with relations

我目前正在通過官方教程學習 Django,並決定嘗試添加一些額外的功能和測試,如建議here

我現在在數據庫中有兩個模型,它們基本上是這樣的:

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

我設置了一個視圖來顯示問題列表。 我想要做的是為視圖創建一個查詢,該查詢將只包含具有關聯選項的問題對象。 任何沒有相關選擇對象的問題對象都不應包含在結果集中。 此查詢還會忽略未來的問題並對它們進行排序,但該部分很好,並且在教程之外。

這是我到目前為止想到的。 它似乎有效,但我不禁認為我已經以一種非常落后和低效的方式完成了它。 是否可以進行一個查詢來處理數據庫中的所有內容,而不是兩個查詢和一個列表理解?

choices = Choice.objects.prefetch_related(
    'question').distinct('question')
question_ids = [x.question.id for x in choices]
return Question.objects.filter(
    id__in=question_ids).filter(
    pub_date__lte=timezone.now()).order_by('-pub_date')[:5]

您可以通過與其關聯的Choice對象的計數來注釋Question ,然后排除計數為零的那些:

from django.db.models import Count
questions = Question.objects \
        .annotate(choice_cnt=Count('choice')) \
        .exclude(choice_cnt=0) \
        .filter(pub_date__lte=timezone.now()) \
        .order_by('-pub_date')[:5]

暫無
暫無

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

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