Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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
Python 在Django get_object_或_404中选择特定字段_Python_Sql_Django_Django Models_Model - Fatal编程技术网

Python 在Django get_object_或_404中选择特定字段

Python 在Django get_object_或_404中选择特定字段,python,sql,django,django-models,model,Python,Sql,Django,Django Models,Model,我在Django有一个模型,有太多字段。 例: 现在我需要基于id获取细节视图。我见过很多方法,比如 obj = MyModel.objects.get(pk=5) obj = MyModel.objects.filter(pk=5)[0] obj = get_object_or_404(MyModel, pk=1) 最后一种方法最适合,因为我可以在不更改任何代码的情况下提供404错误。但我只需要参数1和参数2。因此我需要一个类似于 SELECT "param_1" FROM mymodel

我在Django有一个模型,有太多字段。 例:

现在我需要基于id获取细节视图。我见过很多方法,比如

obj = MyModel.objects.get(pk=5)
obj = MyModel.objects.filter(pk=5)[0]
obj = get_object_or_404(MyModel, pk=1)
最后一种方法最适合,因为我可以在不更改任何代码的情况下提供404错误。但我只需要参数1和参数2。因此我需要一个类似于

SELECT "param_1" FROM mymodel WHERE pk=1
如何使用get_object_或_404实现这一点


有人能帮我找到解决方案吗?

的第一个参数是模型的类名,所有其他参数都是要传递给get的参数。所以这里不能使用它,但是模仿它的功能非常简单

def get_object_or_404_custom(klass,fields = None, *args, **kwargs):
    queryset = _get_queryset(klass)
    try:
        if fields:
            queryset = queryset.only(*fields)
        return queryset.get(*args, **kwargs)
    except AttributeError:
        klass__name = klass.__name__ if isinstance(klass, type) else klass.__class__.__name__
        raise ValueError(
            "First argument to get_object_or_404() must be a Model, Manager, "
            "or QuerySet, not '%s'." % klass__name
        )
    except queryset.model.DoesNotExist:
        raise Http404('No %s matches the given query.' % queryset.model._meta.object_name)

基于:

获取对象或404的第一个参数可以是:

必需参数

klass

一个模型类、一个管理器或一个QuerySet实例 获取对象

因此,您所要做的就是传入一个预筛选的查询集,例如由以下返回的查询集:


所以在get或get\u object\u或\u 404中没有类似的值吗?不,该函数不支持它,但是在某个地方添加此代码,您就有了自己版本的get\u object\u或\u 404!不需要这样做,因为该功能已经内置到该方法中。@Burnkhalid该死!我读了源代码,但没有评论+为了你的回答,我试过了。但我也得到了obj.param_20的值
def get_object_or_404_custom(klass,fields = None, *args, **kwargs):
    queryset = _get_queryset(klass)
    try:
        if fields:
            queryset = queryset.only(*fields)
        return queryset.get(*args, **kwargs)
    except AttributeError:
        klass__name = klass.__name__ if isinstance(klass, type) else klass.__class__.__name__
        raise ValueError(
            "First argument to get_object_or_404() must be a Model, Manager, "
            "or QuerySet, not '%s'." % klass__name
        )
    except queryset.model.DoesNotExist:
        raise Http404('No %s matches the given query.' % queryset.model._meta.object_name)
obj = get_object_or_404(MyModel.objects.only('param_1', 'param_2'), pk=1)