标签: django-queryset

聚合函数返回AttributeError:'Sum'对象没有属性'lookup'

我正在尝试聚合函数,我得到了这个奇怪的结果(最新的官方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)

django django-queryset

1
推荐指数
1
解决办法
5552
查看次数

在 Django 中,可以使用 F() 对象来查看常量是否包含来自字段的字符串?

所有,
我基本上都在尝试进行关键字通知,因此每当创建具有名称的对象时,任何想要收到此名称中的任何单词的通知的人都会被通知。
例如

记录:
   关键词:你好
   关键词:世界

新名称:“你好世界”

返回两条记录


我已经在 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)

还是我要倒退?

django django-models django-queryset

1
推荐指数
1
解决办法
2004
查看次数

Django查询多对一关系,没有外键关系的实例

我在提交和作业之间有多对一的关系(一个学生可能有一个作业有多个提交)。我想创建一个查询,该查询显示没有相关提交的作业。

我的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)

感谢您对查询语法的任何帮助。

django foreign-key-relationship django-queryset

1
推荐指数
1
解决办法
288
查看次数

在django中查询的更好方法

有一个更好的方法吗

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查询的数量也增加

django django-models django-queryset django-views

1
推荐指数
1
解决办法
96
查看次数

查询字段作为字符串?

我想查询作为字符串的特定字段的模型。

演示:

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

django django-models django-queryset

1
推荐指数
1
解决办法
3209
查看次数

Django 通过 MultiSelectField 值过滤 QueryString?

我正在使用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可以实现这一目标?如果不是,那么最轻松的方法是什么?

python django django-queryset

1
推荐指数
1
解决办法
2966
查看次数

Django 过滤特定的 QuerySet.values()

假设我有一个模型 ClassParent和一个 Class Child。并且 child 有一个名为的字段,status并且ForeignKeyParent.

假设我通过调用过滤器(以便拥有一个 QuerySet)来检索一个父对象 p = Parent.objects.filter(pk=1)

现在,如果我打电话,p.values('children__name')我将收到该父母的孩子姓名词典列表。

我的问题是,如果我想调用p.values('children__name')但仅status在孩子的特定值时限制值,我该怎么做?

我还想确保原始 QuerySet 没有改变,因为我不想过滤它(对于更大的 QuerySet)。我只想过滤基于某个参数的值。

有没有办法在 Django 中做到这一点?

python django django-queryset

1
推荐指数
1
解决办法
1万
查看次数

如何在 django views.py 中随机播放列表?

我正在尝试在 django.views 中洗牌

视图.py

import random

def all_songs( request):
    songs_list = Songs.objects.all()
    songs_list=random.shuffle(songs_list)
Run Code Online (Sandbox Code Playgroud)

但是在输入此代码后,会出现显示“'QuerySet' 对象不支持项目分配”的错误。如果没有项目分配,我该怎么做?

django django-queryset django-views python-3.x

1
推荐指数
1
解决办法
2031
查看次数

慢速保存到Django数据库

我创建了一个这样的自定义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,我相信它应该更快.什么可以解释这种糟糕的表现,我该如何改善它?

python sqlite django performance django-queryset

1
推荐指数
1
解决办法
2004
查看次数

使用列表的Django过滤查询集

我有一个表,表A持有表b中所有对象的主键。

如果我将表A中的所有主键存储在一个列表中,那么可以使用我存储在列表中的主键来获取表B中所有对象的列表。

例如:

tableB.objects.filter(pks = list) 
Run Code Online (Sandbox Code Playgroud)

有什么方法可以构建像上面这样的查询集,该查询集将为我提供所有具有主键的对象的列表?

django django-queryset

1
推荐指数
1
解决办法
122
查看次数