Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django数据库在两种模型上的高效查询集_Django_Django Models_Django Views - Fatal编程技术网

django数据库在两种模型上的高效查询集

django数据库在两种模型上的高效查询集,django,django-models,django-views,Django,Django Models,Django Views,我是django的新手,我想知道是否可以使用ORM更有效地进行以下查询: # somewhere in views.py.. if slug is not None: slug_field = self.get_slug_field() pkid = FinalModel.objects.all().get(slug__exact=slug) queryset = queryset.filter(owner__exact=pkid.id) obj = querys

我是django的新手,我想知道是否可以使用ORM更有效地进行以下查询:

# somewhere in views.py..
if slug is not None:
    slug_field = self.get_slug_field()
    pkid = FinalModel.objects.all().get(slug__exact=slug)
    queryset = queryset.filter(owner__exact=pkid.id)
    obj = queryset.get()
    return obj
因此,基本上,我要做的是(返回一个对象),首先:使用url中的slug获取
pkid
,然后使用此信息(
pkid.id
)使用queryset获取正确的完整对象(它在不同的模型上运行-这是
OnetToOne
键控到上面的
FinalModel
)语句

因此,简而言之,我首先使用
slug
(Model=FinalModel)提取
PK
,然后在另一个模型(
queryset
模型)上使用该
PK
,该模型是
OneToOne
键控到
FinalModel
(使用
owner
属性)

我不确定使用两个这样的语句对DB是否有效(我也不是这方面的专家),我想知道是否有人可以建议我如何组合这两个语句(
pkid
queryset
)以更有效地获得最终对象


如果这是django 101的问题,很抱歉。

如果您展示了您的模型,这将更容易回答。但是假设
owner
是从FinalModel到最终想要得到的任何模型的外键,您可以使用双下划线语法进行连接:

obj = MyModel.objects.get(owner__slug=slug)

(请注意,您不需要指定
精确的
,这是默认设置。)

非常感谢这一点-这非常有效!!我想知道我是否可以问你另一个问题(可能与此不完全相关)。我想知道这个语句的作用是什么:
queryset=queryset.filter(**{slug\u field:slug})
特别是,
**{slug\u field:slug}
构造在这里意味着什么?非常感谢您的帮助,这确实帮助我更好地理解了。
**dict
只是一种将字典作为关键字参数传递的方法。这很有用,因为关键字名称本身可以是一个变量,就像在您的示例中一样,也可以是值。非常感谢。解决了所有问题:)将您的答案标记为正确!