Django的
我有下一个型号:
class Group(models.Model):
name = models.CharField(max_length=100)
parent_group = models.ManyToManyField("self", blank=True)
def __unicode__(self):
return self.name
class Block(models.Model):
name = models.CharField(max_length=100)
app = models.CharField(max_length=100)
group = models.ForeignKey(Group)
def __unicode__(self):
return self.name
Run Code Online (Sandbox Code Playgroud)
比方说,块b1有g1组.根据它的名字,我想从g1组中获取所有块.我写了下一个递归函数:
def get_blocks(group):
def get_needed_blocks(group):
for block in group.block_set:
blocks.append(block)
if group.parent_group is not None:
get_needed_blocks(group.parent_group)
blocks = []
get_needed_blocks(group)
return blocks
Run Code Online (Sandbox Code Playgroud)
但是b1.group.block_set返回我的RelatedManager对象,它不可迭代.
该怎么办?怎么了?
我有一个类似于以下内容的查询:
SELECT SUM(ISNULL(table.name)) FROM table
Run Code Online (Sandbox Code Playgroud)
这如何SUM转换为Django中的QuerySet?(即xyz,它会转换成什么操作MyModel.objects.xyz()?)
有没有办法使用django 1.4+中的bulk_create功能获取您创建的项目的主键?
我有这些模型:
def Foo(Models.model):
size = models.IntegerField()
# other fields
def is_active(self):
if check_condition:
return True
else:
return False
def Bar(Models.model):
foo = models.ForeignKey("Foo")
# other fields
Run Code Online (Sandbox Code Playgroud)
现在我想要查询具有活动Foo的条形码:
Bar.objects.filter(foo.is_active())
Run Code Online (Sandbox Code Playgroud)
我收到的错误如
SyntaxError at /
('non-keyword arg after keyword arg'
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
假设我的models.py中有类似的东西:
class Hipster(models.Model):
name = CharField(max_length=50)
class Party(models.Model):
organiser = models.ForeignKey()
participants = models.ManyToManyField(Profile, related_name="participants")
Run Code Online (Sandbox Code Playgroud)
现在在我的views.py中,我想做一个查询,它将为有超过0个参与者的用户取一个派对.
这样的事情可能是:
user = Hipster.get(pk=1)
hip_parties = Party.objects.filter(organiser=user, len(participants) > 0)
Run Code Online (Sandbox Code Playgroud)
这样做的最佳方式是什么?
我有以下Django模型:
class Make:
name = models.CharField(max_length=200)
class MakeContent:
make = models.ForeignKey(Make)
published = models.BooleanField()
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以(不直接编写SQL)生成一个包含所有Makes和每个相关MakeContents的查询集published = True.
我有一个用户创建页面的应用程序.我想运行一个简单的数据库查询,返回有多少用户创建了超过2页.
这基本上就是我想要做的,但当然这不是正确的方法:
User.objects.select_related('page__gte=2').count()
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我正在尝试为超过5个小时的小部件编写一个Django查询,我有点迷失.窗口小部件模型具有使用窗口小部件DateTimeField的创建时间填充的模型.
我有一些记录,我想根据计算值排序.得到的答案在这里 ......像这样:
sorted(Profile.objects.all(), key=lambda p: p.reputation)
Run Code Online (Sandbox Code Playgroud)
在这样的Profile类上:
class Profile(models.Model):
...
@property
def reputation(self):
...
Run Code Online (Sandbox Code Playgroud)
不幸的是,通用视图需要一个queryset对象,如果我给它一个列表就会抛出错误.
有没有办法做到这一点返回一个查询集
要么...
我可以以某种方式将列表转换为查询集吗?在django docs中找不到类似的东西.
我希望不要对数据进行非规范化,但我想我会这样做.
似乎获取查询集的唯一方法是,如果您可以将所有逻辑都放入sql查询中.
如果那是不可能的,(我认为)你需要对数据进行非规范化
使用Django ORM,可以做一些像queryset.objects.annotate(Count('queryset_objects', gte=VALUE)).抓住我的漂移?
这是一个用于说明可能答案的简单示例:
在Django网站中,内容创建者提交文章,并且普通用户查看(即阅读)所述文章.文章可以发表(即可供所有人阅读),也可以草稿模式.描述这些要求的模型是:
class Article(models.Model):
author = models.ForeignKey(User)
published = models.BooleanField(default=False)
class Readership(models.Model):
reader = models.ForeignKey(User)
which_article = models.ForeignKey(Article)
what_time = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何获得所有发表的文章,按照过去30分钟的独特读者排序?即我想要计算每个发表的文章在过去半小时内获得的不同(独特)视图的数量,然后生成按这些不同视图排序的文章列表.
我试过了:
date = datetime.now()-timedelta(minutes=30)
articles = Article.objects.filter(published=True).extra(select = {
"views" : """
SELECT COUNT(*)
FROM myapp_readership
JOIN myapp_article on myapp_readership.which_article_id = myapp_article.id
WHERE myapp_readership.reader_id = myapp_user.id
AND myapp_readership.what_time > %s """ % date,
}).order_by("-views")
Run Code Online (Sandbox Code Playgroud)
这引发了错误:语法错误在"01"或附近(其中"01"是额外的日期时间对象).继续下去并不多.
django ×10
django-queryset ×10
python ×5
django-1.2 ×1
django-orm ×1
django-views ×1
filter ×1
list ×1
model ×1
sorting ×1