簡體   English   中英

Django通過多對多ORM對象中的多個標簽進行過濾

[英]Django filtering by multiple tags in many to many ORM object

我有三個模型。 QueryQueryStringTag標簽和Tag 這些模型是我構建的標簽雲的一部分。 一個Query可以有多個Tag ,一個Tag可以有多個Query TagQuery模型具有連接QueryStringTag模型的外鍵,該模型包含有關查詢如何與標簽關聯的所有信息,反之亦然。

這是我的模型...

class Tag(models.Model):
    name = models.CharField(max_length=101)
    use_count = models.IntegerField(default=1)

class QueryStringTag(models.Model):
    tag = models.ForeignKey(Tag, related_name='qstag')
    querystring = models.ForeignKey(QueryString, related_name='qsquerystring')

class QueryString(BaseObject): 
    """
    Query string holds an SQL statement and query properties for execution
    """

    server_id = models.IntegerField()
    schema = models.CharField(max_length=255, blank=True)
    archived = models.BooleanField(default=False)
    query = models.CharField(max_length=60000) 
    variables = models.TextField(blank=True)
    created_by = models.ForeignKey(User, related_name='queries_created')
    updated_by = models.ForeignKey(User, related_name='queries_last_edited')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField()
    touched_by = models.CharField(max_length=1000)
    config = models.TextField(blank=True)
    runs_started = models.IntegerField(default=0)
    runs_completed = models.IntegerField(default=0)
    runs_completed_duration = models.IntegerField(default=0) # total number of seconds spent running this query to completion
    formats = "pretty_html html json prettyjson csv excel tableau".split()

我目前已經設置好了,所以用戶點擊標簽雲中任何給定數量的標簽,標簽主鍵數組被發送到我的 django 視圖,看起來像這樣: ['12', '14', '15']

我需要使用 Django ORM 來檢索與用戶單擊的所有標簽相關聯的所有查詢。 因此,如果用戶點擊標簽“用戶”、“游戲”和“卡車”,它應該只帶回與用戶點擊的所有標簽相關聯的查詢。 這是AND關系,而不是OR關系。 意思是“Query1”將與“12”、“14”和“15”相關聯。

正確的語法是什么?

qsts_pks = QueryStringTag.objects.filter(tag__pk__in=['12', '14', '15']).values_list('id', flat=True)
queries = QueryString.objects.filter(qsquerystring__pk__in=qsts_pks)

相關文檔herehere

暫無
暫無

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

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