[英]Django Foreign key queries
在以下型号中:
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相关的所有值
还有一个人可以为查询示例建议一个很好的链接。
Ironfroggy是对的,但还有另一种更明显的方法来获取相关的options
和criteria
对象。 Django会自动为指向模型的每个外键创建一个“反向关系”,这通常是相关模型的名称加上_set
。 所以:
mycriteria.options_set.all()
mycriteria.header_set.all()
将为您提供与criteria
对象mycriteria
相关的所有options
和header
对象。
另外,关于样式的注释:正如ironfroggy指出的那样,你不应该在外键字段中使用id
,而且你应该为你的模型类使用大写样式,这样你就可以看到类Criteria
和特定实例之间的区别criteria
。
在链接方面, Django文档非常出色,并解释了所有这些。
首先,不要在名称中使用id
,因为它令人困惑。 该字段不是ID,它是对象本身。 (如果你有一个字段ref
它会自动创建一个字段ref_id
)
options.objects.filter(header=a_header)
您可以像查询任何值一样查询它,其中某些标头实例是您要过滤的值。
我建议尝试一下编码风格和命名约定,这更像你在模型的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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.