2016-04-19 36 views
0

我的應用程序的一部分包含顯示新聞源頂部的狀態。在這裏,我有我的狀態模型django queryset排除在外部表中引用的行

class Status(models.Model): 
    user = models.ForeignKey(User) 
    description = models.CharField(max_length = 600, blank = False) 
    created_at = models.DateTimeField(auto_now_add = True, editable = False) 
    image = models.ImageField(upload_to = 'images/statuspics/%Y/%m/%d', blank = True, null = True) 
    utility = models.ForeignKey(Utility) 
    numlikes = models.IntegerField(default = 0) 

    class Meta: 
     ordering = ["-created_at"] 
     # Change plural form 
     verbose_name_plural = "statuses" 

然後我有反應,這是表示一個職位是如何迴應的一種方式,並宣佈它的地位。

class Response(models.Model): 
    post = models.ForeignKey(Post, null = True, blank = True) 
    status = models.ForeignKey(Status, null = True, blank = True) 
    status_level = models.IntegerField(
     blank = True, 
     choices = STATUS_CHOICES, 
     default = 1) 
    created_at = models.DateTimeField(auto_now_add = True, editable = False) 

基本上我想要做的只是顯示沒有任何相應的響應狀態。我認爲我需要在我的視圖中使用exclude(),但在這種情況下我不完全確定如何正確使用它。

回答

1

你可以試試Status.objects.exclude(response__isnull=True)?它基本上是在Response上對Status型號進行反向查找。

Django doc about isnull

-1

這不是一個Djangonaut會做到這一點,但你可以沒有任何反應與狀態列表:

[s for s in Status.objects.all() if s not in [r.status for r in Response.objects.all()]]

+1

你絕對不應該這樣做......更新......永遠! – crash843

0

你也可以試試這個(反向查找)

Status.objects.filter(response__isnull=False) 
相關問題