- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
背景:
我正在使用 djorm-ext-pgfulltext 扩展在我的一个模型(书签)的标题字段上使用 Postgres 进行全文搜索。
class Bookmark(TimeStampModel):
title = models.CharField(max_length = 100)
# other fields
search_index = VectorField()
objects = SearchManager(
fields = ('title'),
config = 'pg_catalog.english',
search_field = 'search_index',
auto_update_search_field = True
)
我有另一个名为 SharedBookmark 的模型,它是与书签相关的 OneToOne。
class SharedBookmark(TimeStampedModel):
bookmark = models.OneToOneField(Bookmark)
# other fields
我可以使用以下方法通过我的书签实例进行搜索:
Bookmark.objects.search(query)
返回书签的查询集。
我的问题:
检索与返回的书签查询集相关的 SharedBookmarks 的一种可能的“最佳实践”方法是什么?我觉得我缺少一些基本的东西......我试着做
bookmarks = Bookmark.objects.search(query).values_list('id', flat=True)
shared_bookmarks = SharedBookmark.objects.filter(bookmark__pk__in=bookmarks)
除了看起来可能令人费解之外,我收到了一个数据库错误对表“bookmarks_bookmark”的 FROM 子句条目的无效引用
更新了完整的堆栈跟踪和错误:
Traceback:
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
115. response = callback(request, *callback_args, **callback_kwargs)
File "/home/derek/Development/skillfare/skillfare/bookmarks/views.py" in search
88. return render(request, 'main_page.html', variables)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/shortcuts/__init__.py" in render
53. return HttpResponse(loader.render_to_string(*args, **kwargs),
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/template/loader.py" in render_to_string
177. return t.render(context_instance)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/template/base.py" in render
140. return self._render(context)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/template/base.py" in _render
134. return self.nodelist.render(context)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/template/base.py" in render
830. bit = self.render_node(node, context)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
74. return node.render(context)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
124. return compiled_parent._render(context)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/template/base.py" in _render
134. return self.nodelist.render(context)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/template/base.py" in render
830. bit = self.render_node(node, context)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
74. return node.render(context)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
63. result = block.nodelist.render(context)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/template/base.py" in render
830. bit = self.render_node(node, context)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
74. return node.render(context)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render
156. return self.render_template(self.template, context)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render_template
138. output = template.render(context)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/template/base.py" in render
140. return self._render(context)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/template/base.py" in _render
134. return self.nodelist.render(context)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/template/base.py" in render
830. bit = self.render_node(node, context)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/template/debug.py" in render_node
74. return node.render(context)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/template/defaulttags.py" in render
283. if match:
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/db/models/query.py" in __nonzero__
141. return type(self).__bool__(self)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/db/models/query.py" in __bool__
135. next(iter(self))
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/db/models/query.py" in _result_iter
123. self._fill_cache()
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/db/models/query.py" in _fill_cache
939. self._result_cache.append(next(self._iter))
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/db/models/query.py" in _safe_iterator
344. for item in iterator:
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/db/models/query.py" in iterator
301. for row in compiler.results_iter():
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in results_iter
775. for rows in self.execute_sql(MULTI):
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql
840. cursor.execute(sql, params)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/db/backends/util.py" in execute
41. return self.cursor.execute(sql, params)
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py" in execute
58. six.reraise(utils.DatabaseError, utils.DatabaseError(*tuple(e.args)), sys.exc_info()[2])
File "/home/derek/.virtualenvs/skillfare/local/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py" in execute
54. return self.cursor.execute(query, args)
Exception Type: DatabaseError at /search/
Exception Value: invalid reference to FROM-clause entry for table "bookmarks_bookmark"
LINE 1: ...ECT U0."id" FROM "bookmarks_bookmark" U0 WHERE ( ("bookmarks...
^
HINT: Perhaps you meant to reference the table alias "u0".
最佳答案
如 kathikr 所述,以下嵌套查询可用于检索与返回的书签查询集相关的 SharedBookmarks。
SharedBookmark.objects.filter(bookmark__in=Bookmark.objects.search(query))
但是当将此查询与 djorm-ext-pgfulltext 一起使用时,它会产生“对表的 FROM 子句条目的无效引用...”错误。根据https://groups.google.com/d/topic/django-users/5PrcxbF38Ag/discussion这很可能是由于 djorm-ext-pgfulltext 不支持别名重新标记引起的——特别是在 djorm-ext-pgfulltext 中定义的搜索方法中使用 extra()。以下语句将强制执行两个单独的查询来避免错误:
SharedBookmark.objects.filter(bookmark__in=list(Bookmark.objects.search(query)))
关于django - 在 Django 中检索 OneToOne 相关的 QuerySet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17934218/
我正在这里使用这些模型开展一个小项目,我正在尝试找出一种方法来获取一组与当前经过身份验证的用户正在关注的用户关联的所有帖子。 但我不断得到: Cannot use QuerySet for "Prof
基本上我需要一种优雅的方式来执行以下操作:- obj1 = Model1.objects.select_related('model2').get(attribute1=value1) obj2 =
我想知道在删除查询集中的对象时迭代 Django 查询集的最佳方法是什么?例如,假设您有一个包含特定时间条目的日志表,并且您希望将它们存档,以便每 5 分钟不超过 1 个条目。我知道这可能是错误的,但
我今天发现我可以通过索引引用它们来访问查询集中的元素,即 queryset[n] .然而,紧接着我发现queryset[0]不返回与 queryset.first() 相同的记录.为什么会这样,并且是
我看到 QuerySet 类有 2 个不同的方法似乎服务于相同的目的(除非我弄错了):.__nonzero__ 和 .exists 。 (是的,我知道 .__nonzero__ 被 bool 使用。)
我怎样才能让下面的东西起作用? player = Player.objects.get(pk=player_id) game = Game.objects.get(pk=game_id) game_p
我正在使用 Django 1.6 并有如下问题陈述: 假设有两个模型,作者和书籍,那么作者和书籍模型显然是一对多的关系。 现在,我需要显示作者的数据,以便他写的每本书都有一行。 由于 UI 部分在主干
我真的不明白是什么导致了错误我检查了文档,这里有一个非常相似的例子是我的 views.py,我使用的应用程序下的 urls.py 包含,以及模板 View .py class SchoolListVi
几个月来我一直有一个间歇性的错误,我被卡住了!帮助表示赞赏。 class ContentFile(models.Model): """ Represents the metadata
我有几个模型,想要返回属于一个用户的所有模型的查询集,我想知道是否可以从多个模型返回一个查询集? 最佳答案 我假设您的意思是您想从每个模型返回属于用户的所有对象的单个查询集。 你需要一个查询集还是一个
我试图从两个没有外键关系的表中获取结果,只是想知道我使用的方法是否正确。 django.db import models django.contrib.auth.user import User cl
根据 Django REST framework documentation ,以下两个代码片段的行为应该相同。 class UserViewSet(viewsets.ViewSet): ""
我已经在models.py中编写了这些模型: 类User(models.Model): first_name = models.CharField(最大长度= 80) 类Skill(models.Mo
如何在单个表达式中从多对一关系的过滤结果中获取最新值以注释 Django QuerySet? 给定这个玩具模式: from django.db import models class Lorem(mo
我看到很多类似的查询,但似乎没有一个能满足我的需求, 我有一个这样的表: class BGPData(models.Model): subnet = models.ForeignKey(Sub
请问我为什么在我的模板中显示“fav”时收到此错误消息 QuerySet object has no attribute game_id 我试图更换 game_id来自 game , id_game但
我想从字面上将字符串添加到查询集对象。为什么,因为我将它发送到 JSON,将信息放在那里并使其可用而无需遍历查询集将其转换为自定义字典,这将非常好和干净。 我现在所拥有的: a_vote_set.ag
给定一个模型 class Entity(models.Model): identifier = models.IntegerField() created = models.Integ
我的一些对象管理器中有一个方法,它从数据库中获取数据: def products(self, offset=None) 如果没有 offset通过,它只是返回所有对象(大约 5000 个,没有那么多)
我在 StorySerializer 中的 GET/api/stories/169/ 上收到以下错误,如下评论中所述: AttributeError at /api/stories/169/ 'Man
我是一名优秀的程序员,十分优秀!