更新:关于此问题的Open Open:24272
什么都有关系?
Django有一个GenericRelation类,它增加了一个"反向"泛型关系来启用一个额外的API.
事实证明我们可以使用它reverse-generic-relation,filtering或者ordering我们不能在里面使用它prefetch_related.
我想知道这是一个错误,或者它不应该工作,或者它可以在功能中实现的东西.
让我用一些例子告诉你我的意思.
让我们说我们有两个主要模型:Movies和Books.
Movies 有一个 DirectorBooks 有一个 Author我们要的标签分配给我们的Movies和Books,但是,而是采用MovieTag和BookTag模型,我们想用一个单一的TaggedItem与类GFK到Movie或Book.
这是模型结构:
from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
from django.contrib.contenttypes.models import ContentType
class TaggedItem(models.Model):
tag = models.SlugField()
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id') …Run Code Online (Sandbox Code Playgroud) 如何使用Django的ORM和PostgreSQL后端存储二进制数据的"blob"?是的,我知道Django对这种事情感到皱眉,是的,我知道他们更喜欢你使用ImageField或FileField,但这足以说明,这对我的应用来说是不切实际的.
我已经尝试使用TextField进行黑客攻击,但是当我的二进制数据没有严格确认模型编码类型(默认情况下为unicode)时,我会遇到偶然的错误.例如
psycopg2.DataError: invalid byte sequence for encoding "UTF8": 0xe22665
Run Code Online (Sandbox Code Playgroud) 如果我的模型看起来像:
class Publisher(models.Model):
pass
class Book(models.Model):
publisher = models.ForeignKey(Publisher)
class Page(models.Model):
book = models.ForeignKey(Book)
Run Code Online (Sandbox Code Playgroud)
我想得到Publisher我的查询集Publisher.object.all().如果那时想确保预取我可以做:
Publisher.objects.all().prefetch_related('book_set')`
Run Code Online (Sandbox Code Playgroud)
我的问题是:
select_related或必须使用预取prefetch_related?page_set?这不起作用:Publisher.objects.all().prefetch_related('book_set', 'book_set_page_set')
我试图按DAY分组产品,但date_created是一个日期时间字段.
Product.objects.values('date_created') \
.annotate(available=Count('available_quantity'))
Run Code Online (Sandbox Code Playgroud)
收益:
[
{'date_created': datetime.datetime(2012, 4, 14, 13, 3, 6), 'available': 1},
{'date_created': datetime.datetime(2012, 4, 14, 17, 12, 9), 'available': 1},
...
]
Run Code Online (Sandbox Code Playgroud)
我想要:
[
{'date_created': datetime.datetime(2012, 4, 14), 'available': 2}, ...
]
Run Code Online (Sandbox Code Playgroud)
编辑:数据库后端MYSQL
我有以下型号:
class City(models.Model):
...
class Census(models.Model):
city = models.ForeignKey(City)
date = models.DateTimeField()
value = models.BigIntegerField()
Run Code Online (Sandbox Code Playgroud)
现在我想用最新的人口普查值来注释City-queryset.我如何实现这一目标?
我试过了:
City.objects.annotate(population=Max('census__date'))
# --> annotates date and not value
City.objects.annotate(population=Max('census__value'))
# --> annotates highest value, not latest
City.objects.annotate(population=
Case(
When(
census__date=Max('census__date'),
then='census__value')
)
)
# --> annotates 'None'
City.objects.annotate(population=
Case(
When(
census__date=Max('census__date'),
then='census__value')
), output_field=BigIntegerField()
)
# --> takes forever (not sure what happens at the end, after some minutes I stopped waiting)
Run Code Online (Sandbox Code Playgroud)
任何帮助非常感谢!
我在模型中有一个名为"admins"的m2m字段,我需要从视图中获取该字段中所有选定的条目,即用户ID.然后使用用户ID获取每个用户的电子邮件.可能吗?
我想要做的确切事情是向该平台内的所有空间管理员发送大量的内容.
空间模型:
class Space(models.Model):
"""
Spaces model. This model stores a "space" or "place" also known as a
participative process in reality. Every place has a minimum set of
settings for customization.
There are three main permission roles in every space: administrator
(admins), moderators (mods) and regular users (users).
"""
name = models.CharField(_('Name'), max_length=250, unique=True,
help_text=_('Max: 250 characters'))
url = models.CharField(_('URL'), max_length=100, unique=True,
validators=[RegexValidator(regex='^[a-z0-9_]+$',
message='Invalid characters in the space URL.')],
help_text=_('Valid characters are lowercase, digits and \
admins = …Run Code Online (Sandbox Code Playgroud) UPDATE
感谢发布的答案,我找到了一种更简单的方法来制定问题.原始问题可以在修订历史中看到.
我正在尝试将SQL查询转换为Django,但是我收到了一个我不理解的错误.
这是我的Django模型:
class Title(models.Model):
title_id = models.CharField(primary_key=True, max_length=12)
title = models.CharField(max_length=80)
publisher = models.CharField(max_length=100)
price = models.DecimalField(decimal_places=2, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
我有以下数据:
publisher title_id price title
--------------------------- ---------- ------- -----------------------------------
New Age Books PS2106 7 Life Without Fear
New Age Books PS2091 10.95 Is Anger the Enemy?
New Age Books BU2075 2.99 You Can Combat Computer Stress!
New Age Books TC7777 14.99 Sushi, Anyone?
Binnet & Hardley MC3021 2.99 The Gourmet Microwave
Binnet & Hardley MC2222 19.99 Silicon Valley …Run Code Online (Sandbox Code Playgroud) 我需要能够对两个带注释的列的聚合进行排序
所以我想做这样的事情:
c = c.annotate(metric=Sum('results__metric'))
c = c.annotate(metric_prior=Sum('results__metric_prior'))
c = c.annotate(variance=F('metric')-F('metric_prior')) #doesn't work, for demonstrative purposes only
Run Code Online (Sandbox Code Playgroud)
然后:
c = c.order_by('variance')
Run Code Online (Sandbox Code Playgroud)
有谁知道如何完成上述的事情?
我的一个模型特别复杂.当我尝试在Django Admin中编辑它时,它执行1042个查询并花费超过9秒来处理.
我知道我可以替换掉一些下拉菜单raw_id_fields,但我认为更大的瓶颈在于它没有表现出select_related()应有的效果.
我可以让管理网站这样做吗?
--fake-initial和--fakeDjango迁移有什么区别?使用虚假迁移有哪些危险?有人知道吗?非常感谢大家.
我正在使用django 1.10
django ×10
django-orm ×10
python ×4
django-1.8 ×1
django-admin ×1
django-blob ×1
many-to-many ×1
mysql ×1
sql ×1