标签: django-orm

django prefetch_related应该与GenericRelation一起使用

更新:关于此问题的Open Open:24272

什么都有关系?

Django有一个GenericRelation类,它增加了一个"反向"泛型关系来启用一个额外的API.

事实证明我们可以使用它reverse-generic-relation,filtering或者ordering我们不能在里面使用它prefetch_related.

我想知道这是一个错误,或者它不应该工作,或者它可以在功能中实现的东西.

让我用一些例子告诉你我的意思.

让我们说我们有两个主要模型:MoviesBooks.

  • Movies 有一个 Director
  • Books 有一个 Author

我们要的标签分配给我们的MoviesBooks,但是,而是采用MovieTagBookTag模型,我们想用一个单一的TaggedItem与类GFKMovieBook.

这是模型结构:

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)

python django django-models django-orm

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

Django Blob模型领域

如何使用Django的ORM和PostgreSQL后端存储二进制数据的"blob"?是的,我知道Django对这种事情感到皱眉,是的,我知道他们更喜欢你使用ImageField或FileField,但这足以说明,这对我的应用来说是不切实际的.

我已经尝试使用TextField进行黑客攻击,但是当我的二进制数据没有严格确认模型编码类型(默认情况下为unicode)时,我会遇到偶然的错误.例如

psycopg2.DataError: invalid byte sequence for encoding "UTF8": 0xe22665
Run Code Online (Sandbox Code Playgroud)

python django django-models django-orm django-blob

29
推荐指数
3
解决办法
4万
查看次数

prefetch_related用于多个级别

如果我的模型看起来像:

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)

我的问题是:

  1. 有没有办法使用select_related或必须使用预取prefetch_related
  2. 有没有办法预取 page_set?这不起作用:

Publisher.objects.all().prefetch_related('book_set', 'book_set_page_set')

django django-orm django-queryset

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

Django ORM,白天组

我试图按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

python mysql django django-orm

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

使用条件注释在Django 1.8中使用最新相关值进行注释

我有以下型号:

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)

任何帮助非常感谢!

django django-orm django-queryset django-1.8

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

Django - 从多个到多个字段中获取对象

我在模型中有一个名为"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)

django many-to-many django-models django-orm

27
推荐指数
3
解决办法
4万
查看次数

Django中GROUP BY中注释的聚合

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)

sql django django-models django-orm

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

减去两个带注释的列

我需要能够对两个带注释的列的聚合进行排序

所以我想做这样的事情:

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)

有谁知道如何完成上述的事情?

python django django-orm

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

如何强制Django Admin使用select_related?

我的一个模型特别复杂.当我尝试在Django Admin中编辑它时,它执行1042个查询并花费超过9秒来处理.

我知道我可以替换掉一些下拉菜单raw_id_fields,但我认为更大的瓶颈在于它没有表现出select_related()应有的效果.

我可以让管理网站这样做吗?

django django-models django-orm django-admin

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

- Django迁移中的初始vs -fake?

--fake-initial--fakeDjango迁移有什么区别?使用虚假迁移有哪些危险?有人知道吗?非常感谢大家.

我正在使用django 1.10

django django-models django-orm django-migrations

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