我有一个看起来像这样的表:
CREATE TABLE tracks (id SERIAL, artists JSON);
INSERT INTO tracks (id, artists)
VALUES (1, '[{"name": "blink-182"}]');
INSERT INTO tracks (id, artists)
VALUES (2, '[{"name": "The Dirty Heads"}, {"name": "Louis Richards"}]');
Run Code Online (Sandbox Code Playgroud)
还有其他几个与此问题无关的列.将它们存储为JSON是有原因的.
我要做的是查找具有特定艺术家姓名(完全匹配)的曲目.
我正在使用此查询:
SELECT * FROM tracks
WHERE 'ARTIST NAME' IN
(SELECT value->>'name' FROM json_array_elements(artists))
Run Code Online (Sandbox Code Playgroud)
例如
SELECT * FROM tracks
WHERE 'The Dirty Heads' IN
(SELECT value->>'name' FROM json_array_elements(artists))
Run Code Online (Sandbox Code Playgroud)
但是,这会进行全表扫描,并且速度不是很快.我尝试使用函数创建GIN索引names_as_array(artists)并使用'ARTIST NAME' = ANY names_as_array(artists),但是不使用索引并且查询实际上明显更慢.
我想要一个Jquery Mobile中的页脚,这个页脚没有修复,但始终位于页面底部.
像这样:http://ryanfait.com/sticky-footer/(但在JQuery Mobile中),不像标准的JQuery Mobile固定页脚.
因此页脚应出现在内容的末尾或屏幕的底部,以较低者为准.
关于如何处理这个的任何想法?
编辑:
基本的问题是,我似乎无法让div data-role=content实际占据屏幕的整个高度.
我遇到了新的问题
假设我有以下3种型号:
class Author(models.Model):
name = models.TextField()
class Book(models.Model):
author = models.ForeignKey(Author, related_name='books')
title = models.TextField()
is_fiction = models.BooleanField()
class SpeakingEvent(models.Model):
author = models.ForeignKey(Author, related_name='events')
date = models.DateField()
Run Code Online (Sandbox Code Playgroud)
我希望得到一个单独的作者查询集,其中注释了已发布的小说书的数量以及未来演讲事件的数量.
所以,我可以做到以下几点:
Author.objects.all().annotate(
future_speaking=Sum(Case(
When(events__date__gte=timezone.now(),
then=1),
default=0)),
fiction_count=Sum(Case(
When(books__is_fiction=True,
then=1),
default=0)),
)
Run Code Online (Sandbox Code Playgroud)
但是,结果数字太高.如果有m本书和n个事件,那么我们最终会<correct_result> * m计算事件<correct_result> * n数量.这是由于django与左连接一起连接两个表的方式引起的.如果我省略任何一个注释,结果都是正确的.
有没有办法更改连接是删除带有when子句的重复项?
这是一个django模型文件,它没有像我期望的那样工作.我希望to_url方法在urls.py文件中进行反向查找,并获得一个url,它对应于使用Arguments模型提供的参数调用该视图.
from django.db import models
class Element(models.Model):
viewname = models.CharField(max_length = 200)
arguments = models.ManyToManyField('Argument', null = True, blank = True )
@models.permalink
def to_url(self):
d = dict( self.arguments.values_list('key', 'value') )
return (self.viewname, (), d)
class Argument(models.Model):
key = models.CharField(max_length=200)
value = models.CharField(max_length=200)
Run Code Online (Sandbox Code Playgroud)
值d最终作为从unicode字符串到另一个unicode字符串的字典,我相信,它应该可以通过permalink装饰器调用的reverse()方法正常工作,但是,它会导致:
TypeError: reverse() keywords must be strings
Run Code Online (Sandbox Code Playgroud) django ×2
postgresql ×2
css ×1
django-1.8 ×1
django-orm ×1
indexing ×1
json ×1
jsonb ×1
python ×1
sql ×1
unicode ×1