标签: django-queryset

Django,从模型更新

假设我有这个小模型:

class Deal(models.Model):
    purchases = models.IntegerField(default=0)#amount of purchases so far

    increase_purchases(self,to_add):
        self.update( purchases =self.purchases + to_add)
Run Code Online (Sandbox Code Playgroud)

当我尝试从 shell 使用这个increase_purchases 模型时:

>>> x = Deal.objects.get(id=1)
>>> x.increase_purchases(4)
AttributeError: 'Deal' object has no attribute 'update'
Run Code Online (Sandbox Code Playgroud)

如何为模型编写适当的函数,以便我可以根据需要更新所选的查询购买?

django django-models django-queryset

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

Django:列出具有非唯一字段的所有对象

如果我有以下模型:

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
Run Code Online (Sandbox Code Playgroud)

如何列出具有非唯一姓氏字段的所有对象?例如,如果有 20 个对象的姓氏均为“Smith”,则会列出它们。但是,如果只有一个对象的姓氏为“Euler”,则它不会包含在列表中。

django django-queryset

2
推荐指数
2
解决办法
1552
查看次数

Django 从其他模型过滤

例如我有两个模型:

class Symbol(models.Model):
    rowID = models.CharField(max_length=64, primary_key=true)

class SymbolProperties(models.Model):
    symbol = models.ForeignKey(Symbol, to_field='rowID', db_column='symbol')
    some_value = models.IntegerField(default=0)
Run Code Online (Sandbox Code Playgroud)

我想用字段过滤Symbol对象some_value,但模型符号与SymbolProperties没有关系。
我可以在不创建符号模型中的外键的情况下做到这一点吗?

django django-models django-queryset

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

为什么切片 django queryset 返回一个列表

我有一个源自一段名为 objs 的代码的查询集。我在同一打印函数中打印 type(objs) 和 type(objs[0:10]) ,如下所示:

print(type(objs), type(objs[0:10]))
Run Code Online (Sandbox Code Playgroud)

结果显示 type(objs) 是一个查询集。type(objs[0:10]) 是一个列表

但是当我查找 django 文档时,第二个也应该是一个查询集。造成这种情况的可能原因有哪些?

python django django-queryset

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

Django 过滤器查询 - 忽略参数是否为空

在我的 django APIView 类中,我通过以下方式从 POST 中获取月份和年份:

month = request_data.get("month")
year = request_data.get("year")
Run Code Online (Sandbox Code Playgroud)

然后我调用一个查询来获取月==月和年==年的数据。

queryset =  Expenses.objects.filter(month=month, year=year)
Run Code Online (Sandbox Code Playgroud)

如果我发布月份和年份,这完全有效。但我想做以下事情:

如果月份为空,我想获取发布年份中的每条记录。目前,如果我将月份发布为空,那么我不会得到任何结果。我知道这可以通过简单的 if-else 来排序,但我想知道是否有更简单的方法。

django django-models django-queryset

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

DjangoORM:解析自定义数据库函数中的 F 表达式

我正在尝试在 Django 中编写一个自定义 PostgreSQL 函数,它将强制日期时间为查询集中指定的时区。我对 db 函数的第一次调用如下所示:

from django.db.models.expressions import Func

class DateTimeInTimezone(Func):
    template="%(expressions)s AT TIME ZONE %(tz_info)s"
Run Code Online (Sandbox Code Playgroud)

该函数适用于简单的情况,我直接将时区字符串传递到函数中,如下所示:

MyModel.objects.filter(timefield__gte=DateTimeInTimezone(Now(), tz_info='EST'))
Run Code Online (Sandbox Code Playgroud)

但是,它不适用于更复杂的情况,即时区是在模型的某些字段上定义的。考虑以下人为的示例:

class User(models.Model):
    time_zone = models.CharField()

class Meeting(models.Model):
    users = models.ManyToManyField(User, related_name='meetings')
    start_time = models.DateTimeField()  # in UTC
    end_time = models.DateTimeField()  # in UTC
Run Code Online (Sandbox Code Playgroud)

要回答“今天当地时间中午 12 点哪些用户将参加会议?”这一问题,我需要此查询集的一些变体:

noon_utc = ...
User.objects.filter(
    meetings__start_time__lte=DateTimeInTimezone(noon_utc, tz_info=F('time_zone')),
    meetings__end_time__gt=DateTimeInTimezone(noon_utc, tz_info=F('time_zone'))
)
Run Code Online (Sandbox Code Playgroud)

然而,按照目前的编写,DateTimeInTimezone将只是将字符串注入F('time_zone')到 sql 中,而不是解析该字段。

是否可以向此函数添加对F 表达式的支持?我还应该考虑其他方法吗?

django django-orm django-queryset django-postgresql django-1.10

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

检查 Case 查询集语句中是否存在相关对象?

我想用相关对象注释查询集(如果该对象存在),或者使用另一个字段(如果不存在):

#models.py

class MyModel(Model):
  f1 = ForeignKey(MyRelated, related_name='f1')
  f2 = ForeignKey(MyRelated, related_name='f2', null=True)

#queryset

MyModel.objects.annotate(
  f=Case(
    When( *something* ,then=F('f2')),
    default=F('f1')
  )
)
Run Code Online (Sandbox Code Playgroud)

我需要知道的是用什么来代替来*something*检查外键是否存在。

python django django-queryset

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

仅从 QuerySet 中提取没有键的值并将它们保存到列表

我在仅从 QuerySet 获取值时遇到问题。我有我的桌子:

class Temperature(models.Model):
    id = models.IntegerField(primary_key=True)  # AutoField?
    name = models.TextField(blank=True, null=True)
    value = models.IntegerField(blank=True, null=True)
    time = models.TextField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'temperature'
Run Code Online (Sandbox Code Playgroud)

在 views.py 中:

class ChartData(APIView):
    authentication_classes = []
    permission_classes = []

    def get(self, request, format=None):
        labels = list(Temperature.objects.using('sensors').values('time')) 
        temp_values = list(Temperature.objects.using('sensors').values('value'))

        data = {
            "labels": labels,
            "temperature": temp_values,
        }
        return Response(data)
Run Code Online (Sandbox Code Playgroud)

并使用 html 文件中的 console.log() 我正在检查值,目前它们是:在此处输入图片说明

但我只想检索价值,没有钥匙。例如: 在此处输入图片说明

任何帮助将不胜感激

python django django-queryset

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

如何使用自创建以来的天数注释查询集

我正在尝试根据促销进行一些复杂的排序:自创建以来每 7 天促销一篇文章(文章在 30 天后过期)。

我的方法是用自创建以来的天数来注释查询集,但days_since_creation在我的代码中,注释字段 ( )的值始终为 0。

from datetime import timedelta
from django.test import TestCase
from django.db.models import ExpressionWrapper, F
from django.db.models.fields import IntegerField
from django.utils import timezone
from .models import Article
    # class Article(models.Model):
    #     title = models.CharField(max_length=150)
    #     creation_date = models.DateTimeField()
    # 
    #     def __str__(self):
    #         return self.title


class ArticleTestCase(TestCase):

    def test_days_since_creation(self):
        now = timezone.now()
        objects_data = [
            Article(
                title='Alrp',
                creation_date=(now - timedelta(days=5)) # 5 days ago
            ),
            Article(
                title='Bopp',
                creation_date=(now - timedelta(days=7)) # …
Run Code Online (Sandbox Code Playgroud)

django datetime annotate django-queryset

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

django 推迟相关模型查询集中的所有字段

我有一个需要第二个相关模型的查询 Model1.objects.all().select_related("model2__model3")

但我不需要来自模型 2 的任何字段,只需要来自模型 3 的许多不同字段,例如obj.model2.model3.name和其他

如何在不一个接一个明确提及的情况下推迟 model2 中的所有字段?

编辑:模型 1 有外键到模型 2 有外键到模型 3

django django-queryset

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