假设我有这个小模型:
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)
如何为模型编写适当的函数,以便我可以根据需要更新所选的查询购买?
如果我有以下模型:
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”,则它不会包含在列表中。
例如我有两个模型:
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没有关系。
我可以在不创建符号模型中的外键的情况下做到这一点吗?
我有一个源自一段名为 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 文档时,第二个也应该是一个查询集。造成这种情况的可能原因有哪些?
在我的 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 中编写一个自定义 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
我想用相关对象注释查询集(如果该对象存在),或者使用另一个字段(如果不存在):
#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*检查外键是否存在。
我在仅从 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() 我正在检查值,目前它们是:
任何帮助将不胜感激
我正在尝试根据促销进行一些复杂的排序:自创建以来每 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) 我有一个需要第二个相关模型的查询
Model1.objects.all().select_related("model2__model3")
但我不需要来自模型 2 的任何字段,只需要来自模型 3 的许多不同字段,例如obj.model2.model3.name和其他
如何在不一个接一个明确提及的情况下推迟 model2 中的所有字段?
编辑:模型 1 有外键到模型 2 有外键到模型 3