假设你有这个模型:
class Category(models.Model):
node_id = models.IntegerField(primary_key = True)
type_id = models.IntegerField(max_length = 20)
parent_id = models.IntegerField(max_length = 20)
sort_order = models.IntegerField(max_length = 20)
name = models.CharField(max_length = 45)
lft = models.IntegerField(max_length = 20)
rgt = models.IntegerField(max_length = 20)
depth = models.IntegerField(max_length = 20)
added_on = models.DateTimeField(auto_now = True)
updated_on = models.DateTimeField(auto_now = True)
status = models.IntegerField(max_length = 20)
node = models.ForeignKey(Category_info, verbose_name = 'Category_info', to_field = 'node_id'
重要的是外键。 当我尝试:
^{pr2}$我得到了一个错误,返回的比category多,这很好,因为它应该返回多个。但是我想通过另一个字段过滤结果,这个字段是type id(来自第二个模型)
这里是:
class Category_info(models.Model):
objtree_label_id = models.AutoField(primary_key = True)
node_id = models.IntegerField(unique = True)
language_id = models.IntegerField()
label = models.CharField(max_length = 255)
type_id = models.IntegerField()
类型_id可以是1到5之间的任何数字。我绝望地试图只得到一个结果,其中类型\u id将是数字1。在
以下是我在sql中想要的:
SELECT c.*, ci.*
FROM category c
JOIN category_info ci ON (c.node_id = ci.node_id)
WHERE c.type_id = 15 AND c.parent_id = 50 AND ci.type_id = 1
非常感谢任何帮助。在
问候
所以还是没能解决我的问题。。让我再解释一下。在
假设sql:
将返回两行。两者都是相同的,除了category_info表中的type_id字段,其中有两个类型-1和2。如果我要添加到sql-ci.type\U id=1,我会得到正确的结果。但从我所尝试的来看,即使使用了双下划线表示法,它仍然以Django返回2行。在
现在我有了:
^{pr2}$其中node_yutype_id=1表示“ci.type\U id=1英寸。但它仍然返回两行。当我将从模型定义中删除“to_field”时,它将传递,但返回错误的数据,因为默认情况下它将绑定到主键。之后我试图通过链接另一个过滤器来过滤数据,但仍然无法通过。在
下面是一个调试程序,可能有助于:
^{3}$它似乎仍然试图只查找节点的标识而不是类型的标识
唉,我可以哭。。。在
若要筛选相关表中的字段,请使用双下划线表示法。要获取相关的
Category_info
对象的type_id
为15的所有Category
对象,请使用:Django将自动理解您引用的是与
node
相关的任何表上的type_id
字段。在好吧所以。。。在
select\u related()与下划线一起使用效果很好。。。在
相关问题 更多 >
编程相关推荐