我需要一些帮助将这个查询放在Django中.我简化了这里的例子,只是简单地切入了这一点.
MyModel(models.Model):
created = models.DateTimeField()
user = models.ForeignKey(User)
data = models.BooleanField()
Run Code Online (Sandbox Code Playgroud)
我想用英语创建的查询听起来像:
给我昨天创建的数据为False的每条记录,在同一范围内,对于给定用户,数据永远不会显示为True
这是一个示例输入/输出,如果不清楚的话.
表值
ID Created User Data
1 1/1/2010 admin False
2 1/1/2010 joe True
3 1/1/2010 admin False
4 1/1/2010 joe False
5 1/2/2010 joe False
Run Code Online (Sandbox Code Playgroud)
输出查询集
1 1/1/2010 admin False
3 1/1/2010 admin False
Run Code Online (Sandbox Code Playgroud)
我要做的是排除#4记录.这是因为在给定范围"昨天"中,对于记录#2中的用户,数据显示为True一次,因此将排除记录#4.
从某种意义上说,似乎有2个查询正在进行中.一个用于确定给定范围内的记录,另一个用于排除与"True"记录相交的记录.
如何使用Django ORM进行此查询?
class Person(models.Model):
name = models.CharField(max_length=20)
employer = models.CharField(max_length=20)
class Phone(models.Model):
person = models.ForeignKey(Person)
number = models.CharField(max_length=10)
vendor = models.CharField(max_length=20)
Run Code Online (Sandbox Code Playgroud)
如何编写查询来检索所有Phone对象的位置Phone.number = 945678987和Person.employer = 'xyz'?
在我的模型中,我有类Book和Category定义如下:
class Category(models.Model):
name = models.CharField()
class Book(models.Model):
title = models.CharField()
categories = models.ManyToManyField(Category)
Run Code Online (Sandbox Code Playgroud)
我想要的是在给定的Category实例查询集的categories字段中引用的Book实例集.
我意识到我可以遍历书籍的查询集并收集每本书的类别,但这对我来说似乎效率低下,因为这可以在单个SQL查询中说明:
SELECT DISTINCT name
FROM myapp_book_categorys JOIN myapp_category ON myapp_book_categorys.category_id=myapp_category.id
WHERE myapp_book_categorys.book_id IN
(SELECT id FROM myapp_book WHERE ...);
Run Code Online (Sandbox Code Playgroud)
原始SQL是正确的方法还是更高级别的解决方案效率相当?
在Django中,你可以通过这样的记录删除一个QuerySet项目在这里:
queryset = QuerySet.remove(item)
Run Code Online (Sandbox Code Playgroud)
Haystack SearchQuerySet建立在QuerySet上,但似乎未实现remove方法。有谁知道一种删除SearchQuerySet中项目的方法?
FWIW我正在尝试对客户端进行第二级过滤。基本上,我正在遍历SearchQuerySet的几个特定属性。这个想法是,如果他们没有,我想删除它们。
谢谢
我用控制台测试了它.
$ python manage.py shell
>>> from myapp.models import Product
>>>
>>> p = Product.objects.all()[0]
>>> print p.name
>>> 'Chia Seeds'
>>> p = Product.objects.filter(name__istartswith='chia s')
>>> print p
>>> []
Run Code Online (Sandbox Code Playgroud)
使用Django-Trunk(1.4a1)和MySQL 5.1.49-1ubuntu8.1
这是MySQL的问题吗?还有什么?
我有一个django模型,指的是它的自我(在父母 - 子孙关系中).
我正在尝试执行一个查询,该查询将返回特定父级的所有子级和孙级实例.
例如:
class Post(models.Model):
parent = models.ForeignKey('self', null=True, related_name="children")
Run Code Online (Sandbox Code Playgroud)
这种关系深入3层 - 获得所有子/孙的查询集的最佳方法是什么?我想把它们放在一起所以我可以按日期订购它们.
我对Django queryset有问题。
楷模:
class Rooms(models.Model,):
room_state = models.CharField(max_length=255, choices=[('emptyReady', 'empty'), ('emptyWaiting4Clean', 'clean ready'), ('busy', 'busy')])
room_type = models.IntegerField()
room_number = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)
我想通过在python shell中键入来检查queryset的工作情况:
for d in Rooms.objects.filter(room_state="emptyReady", id='1'): print(d)
Run Code Online (Sandbox Code Playgroud)
在我的数据库中,有表Rooms_rooms,表中有room_state列,如果我们在数据库上进行查询:
SELECT room_state FROM Rooms_rooms where id = 1
Run Code Online (Sandbox Code Playgroud)
返回值为空
但是当我使用queryset(如上面的示例)时,我总是得到:Rooms对象
我做错了什么?我尝试在所有WEB中搜索答案3个小时,现在我的耐心已经结束,因此我可以依靠你们所有人;)
我有一个数据库模型,如下所示.将数据视为2本不同的书籍,每本书都有3个评级.
class Book(models.Model):
name = models.CharField(max_length=50)
class Review(models.Model):
book = models.ForeignKey(Book)
review = models.CharField(max_length=1000)
rating = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)
问题:是否可以使用单个查询对列表中的所有评级进行分组.我希望在数据库级别执行此操作,而无需在代码中迭代Queryset.输出应该类似于:
{
'book__name':'book1',
'rating' : [3, 4, 4],
'average' : 3.66,
'book__name':'book2',
'rating : [2, 1, 1] ,
'average' : 1.33
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这个查询,但是按照书名分类的评分也不是,平均值也不正确:
Review.objects.annotate(average=Avg('rating')).values('book__name','rating','average')
Run Code Online (Sandbox Code Playgroud)
编辑:添加说明我正在寻找一种方法来在数据库级别对元素进行分组.
我对查询集使用它_result_cache或它直接命中数据库的时间感到困惑.
例如(在python shell中):
user = User.objects.all() # User is one of my models
print(user) # show data in database (hitting the database)
print(user._result_cache) # output is None
len(user) # output is a nonzero number
print(user._result_cache) # this time, output is not None
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:
_result_cache就是None命中数据库后?_result_cache不是None?_result_cache,而不是命中数据库?关于一般查询,我有点困惑.我有一个带有客户信息类的模型和一个与这些客户相关的评论类.
我想在我的base.html模板中添加一个Info标签,在那里我可以看到最后创建的评论.所以它应该在所有模板/视图中可见.
lastCom = Comment.objects.order_by('-id').last()
Run Code Online (Sandbox Code Playgroud)
问题是我想要一次定义查询而不是每个视图都是separetely.
您是否有提示如何仅在一个地方定义查询并在每个模板中访问它而不是在每个视图中定义查询?
选择什么样的模型管理器,列表视图等