Django过滤器查询 - 不起作用 [英] Django filter query - doesn't work
问题描述
我的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,在runcode
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屋!