Python Django外键查询
在以下模型中:Python Django外键查询,python,django,django-views,django-queryset,Python,Django,Django Views,Django Queryset,在以下模型中: class header(models.Model): title = models.CharField(max_length = 255) created_by = models.CharField(max_length = 255) def __unicode__(self): return self.id() class criteria(models.Model): details = models.CharFiel
class header(models.Model):
title = models.CharField(max_length = 255)
created_by = models.CharField(max_length = 255)
def __unicode__(self):
return self.id()
class criteria(models.Model):
details = models.CharField(max_length = 255)
headerid = models.ForeignKey(header)
def __unicode__(self):
return self.id()
class options(models.Model):
opt_details = models.CharField(max_length = 255)
headerid = models.ForeignKey(header)
def __unicode__(self):
return self.id()
如果数据库中有一行表头为
Id=1,title=value-mart,createdby=CEO
如何查询条件和选项表以获取与标题表相关的所有值
id=1
也可以有人请建议一个好的链接查询的例子 首先,不要在名称中使用
id
,因为这很容易混淆。该字段不是ID,而是对象本身。(如果您有一个字段ref
,它会自动创建一个字段ref\u id
)
您可以像查询任何值一样查询它,其中某个头实例就是您正在筛选的值。我建议尝试使用一种更像Django文档中的命名约定。更像这样:
class Header(models.Model):
...
class Criteria(models.Model):
details = model.CharField(max_length=255)
header = models.ForeignKey(Header)
然后根据需要查询:
# find Criteria for a given header
value_mart = Header.objects.get(id=1)
# ... via an instance of Header.
value_mart.criteria_set.all()
# ... or with a filter().
Criteria.objects.filter(header=value_mart)
Criteria.objects.filter(header_id=1)
本文件还提供了参考资料 Ironfroggy是对的,但是还有另一种更明显的方法可以获得相关的
选项
和标准
对象。Django会自动为指向模型的每个外键创建一个“反向关系”,这通常是相关模型的名称加上\u set
。因此:
mycriteria.options_set.all()
mycriteria.header_set.all()
将为您提供与标准相关的所有选项
和标题
对象
对象mycriteria
另外,还有一个关于样式的注意事项:正如ironfroggy指出的,您不应该在外键字段中使用id
,还应该为模型类使用大写样式,这样您就可以看到类标准
和特定实例标准
之间的差异
就链接而言,这本书非常好,它解释了所有这些。听起来像是你在寻找的 您可以获取要筛选的标题对象,并使用
obj = Header.objects.get(title="value-mart", "createdby=CEO")
obj.criteria_set.all()
有关更多详细信息,请参阅
obj = Header.objects.get(title="value-mart", "createdby=CEO")
obj.criteria_set.all()