goz*_*lli 1 django google-app-engine filter multi-query
我正在尝试选择我的Django数据库中的所有歌曲,其标签是给定列表中的任何一个.有一个Song模型,一个Tag模型和一个SongTag模型(用于多对多关系).
这是我的尝试:
taglist = ["cool", "great"]
tags = Tag.objects.filter(name__in=taglist).values_list('id', flat=True)
song_tags = SongTag.objects.filter(tag__in=list(tags))
Run Code Online (Sandbox Code Playgroud)
此时我收到一个错误:
DatabaseError: MultiQuery does not support keys_only.
Run Code Online (Sandbox Code Playgroud)
我错了什么?如果您可以建议一个完全不同的方法来解决问题,那么它也会受到欢迎!
编辑:我应该提到我正在使用django-nonrel 在Google AppEngine上使用Django
您不应该与AppEngine使用m2m关系.NoSQL数据库(和BigTable的是其中之一),一般不支持连接,并且程序员应该非规范化的数据结构.这是一个深思熟虑的设计方案:虽然您的数据库将包含冗余数据,但您的读取查询将更加简单(无需组合来自3个表的数据),这反过来又使DB服务器的设计更加简单(当然这是为了优化和缩放而制作的)
在您的情况下,您应该摆脱Tag和SongTag模型,并将标签作为字符串存储在Song模型中.我当然假设Tag模型只包含id和name,如果Tag实际上包含更多数据,你仍然应该有Tag模型.在这种情况下,歌曲模型应包含tag_id和tag_name.正如我上面解释的那样,这个想法是为了简单的查询而引入冗余
| 归档时间: |
|
| 查看次数: |
516 次 |
| 最近记录: |