Django过滤器查询 - 不起作用 [英] Django filter query - doesn't work

查看:212
本文介绍了Django过滤器查询 - 不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我的Django有问题,我想写一个非常简单的查询,但是它不起作用。

 类游戏(models.Model):
name = models.CharField(max_length = 128)
path_to_folder = models.CharField(max_length = 256)
description = models.TextField()
cover = models.URLField()

def __str __(self):
return self.name

我正在尝试这样的东西(应该在我看来会发现):

 >>>从gamepanel.models进口游戏
>>> e = Games.objects.all()
>>> print(e)
[<游戏:使命召唤4>]
>>> e [0] .name
'使命召唤4'
>>> q = Games.objects.filter(name = e [0] .name)

但是当我写最后一行,并输入我得到:

 追溯(最近的最后一次呼叫):
文件/ home / zoli / Desktop / django-master / newest / django-trunk / django / db / models / options.py,第404行,get_field_by_name
return self._name_map [name]
AttributeError:'Options'对象没有属性'_name_map'

在处理上述异常时,发生另一个异常:

追溯(最近的最后一次调用):
文件/ home /zoli/Desktop/django-master/newest/django-trunk/django/db/models/options.py,第518行,在get_all_related_m2m_objects_with_model
cache = self._related_many_to_many_cache
AttributeError:'Options'对象没有属性'_related_many_to_many_cache'

在处理上述异常时,发生另一个异常:

追溯(最近的最后一次调用):
文件/ usr / lib / python3.4 / code.py,lin e 90,在runco​​de
exec(code,self.locals)
文件< input>,第1行,< module>
文件/home/zoli/Desktop/django-master/newest/django-trunk/django/db/models/manager.py,第80行,manager_method
return getattr(self.get_queryset( ),name)(* args,** kwargs)
文件/home/zoli/Desktop/django-master/newest/django-trunk/django/db/models/query.py,第702行, filter
return self._filter_or_exclude(False,* args,** kwargs)
文件/ home / zoli / Desktop / django-master / newest / django-trunk / django / db / models / query。 py,第720行,在_filter_or_exclude
clone.query.add_q(Q(* args,** kwargs))
文件/ home / zoli / Desktop / django-master / newest / django-trunk /django/db/models/sql/query.py,第1316行,add_q
子句,require_inner = self._add_q(where_part,self.used_aliases)
文件/ home / zoli / Desktop / django-master / newest / django-trunk / django / db / models / sql / query.py,第1343行,_add_q
current_negated = current_negated,connector = connector)
文件/ home / zoli /Desktop/django-master/newest/django-trunk/django/db/models/sql/query.py,第1164行,在bu ild_filter
查找,部分,reffed_aggregate = self.solve_lookup_type(arg)
文件/ home / zoli / Desktop / django-master / newest / django-trunk / django / db / models / sql / query。 py,行1076,在solve_lookup_type
_,字段,_,lookup_parts = self.names_to_path(lookup_splitted,self.get_meta())
文件/ home / zoli / Desktop / django-master / newest /django-trunk/django/db/models/sql/query.py,第1368行,在names_to_path
字段中,model,direct,m2m = opts.get_field_by_name(name)
文件/ home / zoli / Desktop / django-master / newest / django-trunk / django / db / models / options.py,第406行,get_field_by_name
cache = self.init_name_map()
文件/ home / zoli / Desktop / django-master / newest / django-trunk / django / db / models / options.py,第435行,init_name_map
for f,model in self.get_all_related_m2m_objects_with_model():
文件/home/zoli/Desktop/django-master/newest/django-trunk/django/db/models/options.py,第520行,在get_all_related_m2m_objects_with_model
cache = self._fill_rel ated_many_to_many_cache()
文件/home/zoli/Desktop/django-master/newest/django-trunk/django/db/models/options.py,第534行,在_fill_related_many_to_many_cache
中为klass在自己.apps.get_models():
文件/usr/lib/python3.4/functools.py,第428行,包装器
result = user_function(* args,** kwds)
文件/home/zoli/Desktop/django-master/newest/django-trunk/django/apps/registry.py,第168行,在get_models
self.check_models_ready()
文件/ home / zoli / Desktop / django-master / newest / django-trunk / django / apps / registry.py,第131行,check_models_ready
raise AppRegistryNotReady(Models are not loaded yet。)

django.core.exceptions.AppRegistryNotReady:模型尚未加载。



我不知道我在做错什么,我也尝试过与.id一样的,但它也不起作用。

解决方案

在Django 1.7及更高版本中,您无法使用明确的initialis模型先Django。执行以下命令:

  import django 
django.setup()

之后,您的查询将工作。



相关的Django文档: https://docs.djangoproject.com/en/dev/ref/applications/#initialization -process


I have problems with my Django, I want to write a very simple query but it doesn't work.

Model:

class Games(models.Model):
    name = models.CharField(max_length=128)
    path_to_folder = models.CharField(max_length=256)
    description = models.TextField()
    cover = models.URLField()

    def __str__(self):
        return self.name

I am trying something like this (It should find itself in my opinion):

>>> from gamepanel.models import Games
>>> e = Games.objects.all()
>>> print (e)
[<Games: Call Of Duty 4>]
>>> e[0].name
'Call Of Duty 4'
>>> q = Games.objects.filter(name=e[0].name)

but when I wrote the last line and hit enter I get:

Traceback (most recent call last):
File "/home/zoli/Desktop/django-master/newest/django-trunk/django/db/models/options.py", line 404, in get_field_by_name
return self._name_map[name]
AttributeError: 'Options' object has no attribute '_name_map'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/zoli/Desktop/django-master/newest/django-trunk/django/db/models/options.py", line 518, in get_all_related_m2m_objects_with_model
cache = self._related_many_to_many_cache
AttributeError: 'Options' object has no attribute '_related_many_to_many_cache'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3.4/code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
File "/home/zoli/Desktop/django-master/newest/django-trunk/django/db/models/manager.py", line 80, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/zoli/Desktop/django-master/newest/django-trunk/django/db/models/query.py", line 702, in filter
return self._filter_or_exclude(False, *args, **kwargs)
File "/home/zoli/Desktop/django-master/newest/django-trunk/django/db/models/query.py", line 720, in _filter_or_exclude
clone.query.add_q(Q(*args, **kwargs))
File "/home/zoli/Desktop/django-master/newest/django-trunk/django/db/models/sql/query.py", line 1316, in add_q
clause, require_inner = self._add_q(where_part, self.used_aliases)
File "/home/zoli/Desktop/django-master/newest/django-trunk/django/db/models/sql/query.py", line 1343, in _add_q
current_negated=current_negated, connector=connector)
File "/home/zoli/Desktop/django-master/newest/django-trunk/django/db/models/sql/query.py", line 1164, in build_filter
lookups, parts, reffed_aggregate = self.solve_lookup_type(arg)
File "/home/zoli/Desktop/django-master/newest/django-trunk/django/db/models/sql/query.py", line 1076, in solve_lookup_type
_, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
File "/home/zoli/Desktop/django-master/newest/django-trunk/django/db/models/sql/query.py", line 1368, in names_to_path
field, model, direct, m2m = opts.get_field_by_name(name)
File "/home/zoli/Desktop/django-master/newest/django-trunk/django/db/models/options.py", line 406, in get_field_by_name
cache = self.init_name_map()
File "/home/zoli/Desktop/django-master/newest/django-trunk/django/db/models/options.py", line 435, in init_name_map
for f, model in self.get_all_related_m2m_objects_with_model():
File "/home/zoli/Desktop/django-master/newest/django-trunk/django/db/models/options.py", line 520, in get_all_related_m2m_objects_with_model
cache = self._fill_related_many_to_many_cache()
File "/home/zoli/Desktop/django-master/newest/django-trunk/django/db/models/options.py", line 534, in _fill_related_many_to_many_cache
for klass in self.apps.get_models():
File "/usr/lib/python3.4/functools.py", line 428, in wrapper
result = user_function(*args, **kwds)
File "/home/zoli/Desktop/django-master/newest/django-trunk/django/apps/registry.py", line 168, in get_models
self.check_models_ready()
File "/home/zoli/Desktop/django-master/newest/django-trunk/django/apps/registry.py", line 131, in check_models_ready
raise AppRegistryNotReady("Models aren't loaded yet.")

django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

I have no idea what I am doing wrong, I also tried do the same with .id but it doesn't work neither.

解决方案

In Django 1.7 and later you can't use models without explicitly initialising Django first. Run the following commands:

import django
django.setup()

And after that your queries will work.

Relevant Django doc: https://docs.djangoproject.com/en/dev/ref/applications/#initialization-process

这篇关于Django过滤器查询 - 不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆