Hul*_*ulk 10 python django django-queryset django-views
在以下型号中:
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()
Run Code Online (Sandbox Code Playgroud)
如果数据库中有一行表头为
Id=1, title=value-mart , createdby=CEO
如何查询条件和选项表以获取与标头表id = 1相关的所有值
还有一个人可以为查询示例建议一个很好的链接.
Dan*_*man 20
Ironfroggy是对的,但还有另一种更明显的方法来获取相关options和criteria对象.Django会自动为每个指向模型的外键创建一个"反向关系",这通常是相关模型的名称_set.所以:
mycriteria.options_set.all()
mycriteria.header_set.all()
Run Code Online (Sandbox Code Playgroud)
将为您提供options与header对象相关的所有criteria对象mycriteria.
另外,关于样式的注释:正如ironfroggy指出的那样,你不应该id在外键字段中使用,而且你应该为你的模型类使用大写样式,这样你就可以看到类Criteria和特定实例之间的区别criteria.
在链接方面,Django文档非常出色,并解释了所有这些.
首先,不要id在名称中使用,因为它令人困惑.该字段不是ID,它是对象本身.(如果你有一个字段,ref它会自动创建一个字段ref_id)
options.objects.filter(header=a_header)
Run Code Online (Sandbox Code Playgroud)
您可以像查询任何值一样查询它,其中某些标头实例是您要过滤的值.
我建议尝试使用一种编码风格和命名约定,这更像是您在 Django 文档中看到的Models。更像这样的东西:
class Header(models.Model):
...
class Criteria(models.Model):
details = model.CharField(max_length=255)
header = models.ForeignKey(Header)
Run Code Online (Sandbox Code Playgroud)
然后根据需要查询它们:
# 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)
Run Code Online (Sandbox Code Playgroud)
听起来像你正在寻找以下关系"向后".
您可以获取要过滤的标题对象,并使用类似的内容
obj = Header.objects.get(title="value-mart", "createdby=CEO")
obj.criteria_set.all()
Run Code Online (Sandbox Code Playgroud)
查看文档以获取更多详细信息
| 归档时间: |
|
| 查看次数: |
29093 次 |
| 最近记录: |