Django在多个ORM对象中通过多个标签进行过滤

时间:2016-05-10 18:26:04

标签: python mysql django orm models

我有三个型号。 $( document ).ready(function() { var table = $('#example').DataTable({ //"bProcessing": true, //"sAjaxSource": "response.php", "processing": true, "serverSide": true, //"bDestroy": true, // "bJQueryUI": true, "aoColumns": [ { mData: 'FNAME' } , { mData: 'FPRICE' }, { mData: 'IMGPATH' }, { mData: 'FDESC' }, { mData: 'CID' } ], "ajax": { 'type': 'POST', 'url': 'response.php', 'data': {id: $('#myselect').val()} // "success":function (res) { // // } } }); $('#myselect').change(function() { var item = $(this).val(); // alert(item) var urld = 'response.php/'+item; table.ajax.url(urld).load(); table.reload(); }); // setInterval( function () { // table.ajax.reload(); // }, 10000 ); //table.fnDraw(); }); QueryQueryStringTag。这些模型是我构建的标签云的一部分。 Tag可以包含多个QueryTag可以包含多个Tag个。 QueryTag模型具有连接Query模型的外键,该模型包含有关查询如何与标记关联的所有信息,反之亦然。

以下是我的模特......

QueryStringTag

我目前已设置好,因此用户点击代码云中任意给定数量的代码,并将一系列代码主键发送到我的django视图,如下所示: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 ORM来检索与用户点击的所有标记相关联的所有查询。因此,如果用户点击了代码,“用户”,“游戏”,“卡车”,它应该只返回与用户点击的所有标记相关联的查询。这是['12', '14', '15']关系,而不是AND关系。含义"查询1"会与' 12'相关联。和' 14'和' 15'。

正确的语法是什么?

1 个答案:

答案 0 :(得分:2)

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