我有以下型号:
class DataStream(models.Model):
category = models.CharField(max_length=255)
description = models.TextField()
class DataStreamSubCategory(models.Model):
data_stream = models.ForeignKey(DataStream)
sub_category = models.CharField(max_length=255)
class DataStreamExample(models.Model):
data_stream = models.ForeignKey(DataStream)
example = models.CharField(max_length=255)
因此,每个DataStream
可以有0个或多个DataStreamSubCategory
对象和0个或多个DataStreamExample
对象。你知道吗
我要做的是在模板的简单表中显示这些值:
----------------------------------------
| Category | Sub-categories | Examples |
----------------------------------------
| Cat1 | Sub-cat1 | Ex1 |
| | Sub-cat2 | Ex2 |
| | Sub-cat3 | |
----------------------------------------
| Cat2 | Sub-cat4 | Ex1 |
| | | Ex2 |
----------------------------------------
那么,查询数据库以获取这些数据的最佳方式是什么呢?最明显的(但可能是愚蠢的)方法是:
data_streams = DataStream.objects.all()
for data_stream in data_streams:
sub_categories = DataStreamSubCategory.objects.filter(data_stream=data_stream)
examples = DataStreamExample.objects.filter(data_stream=data_stream)
但是有没有更有效的方法呢?看起来这里应该有一些SQL连接,但是我不确定如何使用Django ORM来完成这一点。你知道吗
您可以直接在模板中进行查询,如下所示:
我会让你自己弄清楚格式的。你知道吗
在上下文中,只需发送
{'data_streams': data_streams}
基本上,对于反向外键关系,您可以执行
object.lowercasemodelname_set.all()
来获取相关的对象queryset。你知道吗阅读更多关于lookups that span relationships here
或者您可以添加一个
related_name
属性并使用它来代替lowercasemodelname_set
如果您想减少数据库上的查询数量,甚至可以考虑使用^{} option
相关问题 更多 >
编程相关推荐