我正在尝试聚合函数,我得到了这个奇怪的结果(最新的官方Django 1.2版本).这是模型:
class Reputation(models.Model):
user = models.ForeignKey(User)
modifier = models.IntegerField()
activity = models.ForeignKey(Activity)
Run Code Online (Sandbox Code Playgroud)
这就是我得到的:
In [37]: Reputation.objects.aggregate(r=Sum('modifier'))
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
C:\Data\Development\django_projects\oko\lib\site-packages\django\db\models\manager.pyc in aggregate(self, *args, **kwargs)
142
143 def aggregate(self, *args, **kwargs):
--> 144 return self.get_query_set().aggregate(*args, **kwargs)
145
146 def annotate(self, *args, **kwargs):
C:\Data\Development\django_projects\oko\lib\site-packages\django\db\models\query.pyc in aggregate(self, *args, **kwargs)
315 for (alias, aggregate_expr) in kwargs.items():
316 query.add_aggregate(aggregate_expr, self.model, alias,
--> 317 is_summary=True)
318
319 return query.get_aggregation(using=self.db)
C:\Data\Development\django_projects\oko\lib\site-packages\django\db\models\sql\query.pyc in add_aggregate(self, aggregate, model, alias, is_summary)
929 """
930 opts = …Run Code Online (Sandbox Code Playgroud) 所有,
我基本上都在尝试进行关键字通知,因此每当创建具有名称的对象时,任何想要收到此名称中的任何单词的通知的人都会被通知。
例如
记录: 关键词:你好 关键词:世界 新名称:“你好世界” 返回两条记录
我已经在 sqlite 中创建了一个正确适用于此的查询,并且我知道如何跨数据库翻译它。
SELECT * FROM table t
WHERE "a constant string" LIKE "%" || t.field || "%";
Run Code Online (Sandbox Code Playgroud)
我已经确定在 django 中,可以使用F() 对象将一个字段与另一个字段进行比较,如下所示:
Entry.objects.filter(n_comments__gt=F('n_pingbacks'))
Run Code Online (Sandbox Code Playgroud)
现在有人知道如何用常量字符串替换第一个字段吗?像这样:
Entry.objects.filter("constant string"__icontains=F('n_pingbacks'))
Run Code Online (Sandbox Code Playgroud)
还是我要倒退?
我在提交和作业之间有多对一的关系(一个学生可能有一个作业有多个提交)。我想创建一个查询,该查询显示没有相关提交的作业。
我的models.py包括:
class Assignment(model.Model):
student=models.ForeignKey("Student")
timeStarted=models.DateTimeField(null=True)
class Submission(models.Model):
assignment=models.ForeignKey("Assignment")
timeSubmitted=models.DateTimeField(auto_now_add=True)
answerFile=models.FileField(upload_to="/%Y/%m/%d")
Run Code Online (Sandbox Code Playgroud)
感谢您对查询语法的任何帮助。
有一个更好的方法吗
questionobjects = Questions.objects.all()
for questionobject in questionobjects:
answerobjects = Answers.objects.filter(question=questionobject.id).count()
Run Code Online (Sandbox Code Playgroud)
在上面的查询Answers模型中有外键关系Questions.但是在上面的脚本中,查询Answer查询基于questionobjects的数量执行.
假设有10个问题对象,则会发生10个单独的回答对象查询.有没有办法使用单个查询执行此操作,因为随着questionobjects数量的增加,这将是一个问题,因为answerobjects查询的数量也增加
我想查询作为字符串的特定字段的模型。
演示:
class Foo(models.Model):
someones_name = models.CharField(max_length=100)
anothers_name = models.CharField(max_length=100)
# python shell:
>> Foo.objects.get(pk=1).someones_name
u'Cpt. Hook'
>> Foo.objects.get(pk=1).anothers_name
u'Peter Pan'
Run Code Online (Sandbox Code Playgroud)
现在 - 我在一个变量中输入了字段的名称 someones_name
>> field_name = 'someones_name'
Run Code Online (Sandbox Code Playgroud)
那么,如何使用该 field_name 变量对 Foo-Model 执行几乎相同的查询?如果真的有这种可能吗?
编辑
我不想用那个 field_name 进行查询。我想要 field_name 中给出的字段的确切值。我知道我可以做这样的事情
query = Foo.objects.get(pk=1)
query.someones_name
query.anothers_name
Run Code Online (Sandbox Code Playgroud)
我所需要的只是获取我从._meta.fields(从另一个模型)动态接收的这个特定字段作为字符串。
在 RAW-SQL 中,类似于: 'SELECT %s FROM foo where pk = 1' % field_name
我正在使用MultiSelectField来存储话题/话题的对话
我的模型看起来有点像这样:
class Conversation(models.Model):
(...)
note= models.CharField(max_lenght=250)
TOPIC_CHOICES =(
(1,"about cats"),
(2, "about dogs"),
(3, "about fluffy little things"),
)
topic =MultiSelectField(choices=TOPIC_CHOICES)
Run Code Online (Sandbox Code Playgroud)
我在里面使用ListView和过滤 GET 参数get_queryset:
表格摘录:
class SearchForm(Form):
(...)
topic = MultipleChoiceField(choices=Conversation.TOPIC_CHOICES, required=False)
Run Code Online (Sandbox Code Playgroud)
get_queryset 提取:
(...)
if form.cleaned_data['topic']:
search_params.update({'topic__in': form.cleaned_data['topic']})
(...)
return qs.filter(**search_params)
Run Code Online (Sandbox Code Playgroud)
这种方法适用于单值选择字段。
但在这种情况下,如果我是前任。以“关于猫”的形式选择我只得到了主题设置为仅猫的对象(“关于猫”而没有其他 - 单个值)。
我想要的是其中一个主题值为 1-“关于猫”的所有对象。这意味着如果某个对象有 topic= 1,3(cats and fluffy things) 它也应该出现
第二种情况:我在表单中选择“关于猫”和“关于狗” - 我希望所有将猫作为主题之一的对象以及将狗作为主题之一的所有对象现在,当我选择多个选项时例如。猫和狗 我把所有只有猫的和所有只有狗的作为主题
是否有任何其他字段查找字符串而不是__in可以实现这一目标?如果不是,那么最轻松的方法是什么?
假设我有一个模型 ClassParent和一个 Class Child。并且 child 有一个名为的字段,status并且ForeignKey与Parent.
假设我通过调用过滤器(以便拥有一个 QuerySet)来检索一个父对象 p = Parent.objects.filter(pk=1)
现在,如果我打电话,p.values('children__name')我将收到该父母的孩子姓名词典列表。
我的问题是,如果我想调用p.values('children__name')但仅status在孩子的特定值时限制值,我该怎么做?
我还想确保原始 QuerySet 没有改变,因为我不想过滤它(对于更大的 QuerySet)。我只想过滤基于某个参数的值。
有没有办法在 Django 中做到这一点?
我正在尝试在 django.views 中洗牌
import random
def all_songs( request):
songs_list = Songs.objects.all()
songs_list=random.shuffle(songs_list)
Run Code Online (Sandbox Code Playgroud)
但是在输入此代码后,会出现显示“'QuerySet' 对象不支持项目分配”的错误。如果没有项目分配,我该怎么做?
我创建了一个这样的自定义manage.py命令:
from django.contrib.auth.models import User
from django.core.management.base import BaseCommand
from photos.models import Person
class Command(BaseCommand):
help = 'Pre-populate database with initial data'
def _create_people(self, user):
for i in range(0, 100):
person = Person(first_name='FN', surname='SN', added_by=user)
person.save()
def handle(self, *args, **options):
user = User.objects.get(username="user1")
self._create_people(user)
Run Code Online (Sandbox Code Playgroud)
我已经定时handle()执行了,如果我不这样做需要大约0.02秒,如果我保存则person.save()大约需要0.1秒Person.数据库是sqlite,我相信它应该更快.什么可以解释这种糟糕的表现,我该如何改善它?
我有一个表,表A持有表b中所有对象的主键。
如果我将表A中的所有主键存储在一个列表中,那么可以使用我存储在列表中的主键来获取表B中所有对象的列表。
例如:
tableB.objects.filter(pks = list)
Run Code Online (Sandbox Code Playgroud)
有什么方法可以构建像上面这样的查询集,该查询集将为我提供所有具有主键的对象的列表?
django ×10
django-queryset ×10
python ×3
django-views ×2
performance ×1
python-3.x ×1
sqlite ×1