标签: django-orm

更改南迁移目录

如何更改South查找应用迁移的位置?

默认情况下,South假定应用程序的迁移在/迁移中.但是,我已经迁移了安装在/usr/local/lib/python-2.6/dist-packages/的第三方软件包的模型,因此South正在寻找那里的迁移,而不是我的自定义代码库的位置.

python django django-orm django-south

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

SQLAlchemy的管理界面?

我一直在开发一个Django应用程序,但是我最近改变了整体架构计划.我不再需要一个Web框架,只需一个简单的Python脚本,所以我正在从使用Django ORM转向使用SQLAlchemy来创建和管理数据库.

以前我使用Django Admin界面来审查用户发布的内容(添加到数据库中),以便审核它们.

我仍然需要一种通过网站审核用户添加内容的方法.我认为有两种选择:

  • 从头开始自己构建管理Web界面:(
  • 使用现有库,可以更轻松地创建管理界面(对于使用SQLAlchemy创建的数据库).

我开始研究FormAlchemy.如果您有使用FormAlchemy的经验:是否可以使用它创建管理界面,并且是一个特别的框架,更适合用它构建它?


否则,你知道SQLAlchemy管理界面问题有什么好的解决方案吗?

python django sqlalchemy django-orm formalchemy

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

姜戈 ORM。加入子查询

我有一个表格,其中包含一些网站的列表和一个包含它们的统计信息的表格。

class Site(models.Model):
    domain_name = models.CharField(
        max_length=256,
        unique=True,
    )


class Stats(models.Model):
    date = models.DateField()
    site = models.ForeignKey('Site')
    google_pr = models.PositiveIntegerField()

    class Meta:
        unique_together = ('site', 'date')
Run Code Online (Sandbox Code Playgroud)

我想查看具体日期的所有站点和统计数据。如果该日期的统计记录不存在,则选择必须仅包含站点。

如果我使用:

Site.objects.filter(stats__date=my_date)
Run Code Online (Sandbox Code Playgroud)

我不会得到它没有记录网站my_datestats表格。因为在这种情况下,SQL 查询将如下所示:

SELECT *
FROM site
LEFT OUTER JOIN stats ON site.id = stats.site_id
WHERE stats.date = 'my_date'
Run Code Online (Sandbox Code Playgroud)

查询条件将排除日期为 NULL 的记录,没有统计信息的站点将不包括在选择中。

在我的情况下,我需要加入已按日期过滤的统计表:

SELECT *
FROM site
LEFT OUTER JOIN
  (SELECT *
   FROM stats
   WHERE stats.date = 'my-date') AS stats
ON site.id = stats.site_id
Run Code Online (Sandbox Code Playgroud)

如何将此查询转换为 Django ORM?

谢谢。

django join left-join django-orm django-managers

9
推荐指数
3
解决办法
9546
查看次数

Django从所有组中删除用户

我想从分配给的所有组中删除用户.我在Django中使用标准的auth应用程序.

到目前为止,我可以一次删除一个组:

user.groups.remove(group)
Run Code Online (Sandbox Code Playgroud)

但这增加了很多sql开销.我知道这是一个多对多关系,但我无法找到哪个模型代表多对多映射并从那里调用delete方法.

我想用Django ORM执行以下查询:

delete from auth_user_group where user_id = 123
Run Code Online (Sandbox Code Playgroud)

django django-orm

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

在关于行顺序的多个字段中搜索

我有一个如下模型:

class Foo(models.Model):
    fruit = models.CharField(max_length=10)
    stuff = models.CharField(max_length=10)
    color = models.CharField(max_length=10)
    owner = models.CharField(max_length=20)
    exists = models.BooleanField()
    class Meta:
        unique_together = (('fruit', 'stuff', 'color'), )
Run Code Online (Sandbox Code Playgroud)

它填充了一些数据:

fruit  stuff  color   owner  exists
Apple  Table   Blue     abc    True
 Pear   Book    Red     xyz   False
 Pear  Phone  Green     xyz   False
Apple  Phone   Blue     abc    True
 Pear  Table  Green     abc    True
Run Code Online (Sandbox Code Playgroud)

我需要将它与一个集合(不是查询集)合并/连接:

[('Apple', 'Table', 'Blue'), ('Pear', 'Phone', 'Green')]
Run Code Online (Sandbox Code Playgroud)

因此,当我使用此元组列表搜索此模型时,基本上应返回行0和2.

目前我的解决方法是读Foo.objects.all()入一个DataFrame并与元组列表合并并获取要传递给的ID Foo.objects.filter().我也尝试迭代列表并调用Foo.object.get()每个元组,但它非常慢.名单很大.

当我按照当前答案的建议尝试链接Q时,它抛出了一个OperationalError(太多的SQL变量).

我的主要目标如下:

从模型中可以看出,这三个字段共同构成了我的主键.该表包含大约15k个条目.当我从另一个源获取数据时,我需要检查数据是否已经存在于我的表中并相应地创建/更新/删除(新数据可能包含多达15k个条目).有没有一种干净有效的方法来检查这些记录是否已经在我的表中?

注意:元组列表不必是那种形状.我可以修改它,将其转换为另一个数据结构或转置它.

python django django-orm django-queryset

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

我们可以在 Django ORM 中对 CharField 进行求和吗?

我在 Django ORM 中的模型是这样的

class Test(Modelbase):
    id = models.IntegerField(null=True, blank=True)
    amount = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)

我想添加 id 列表的数量。唯一的问题是金额字段是CharField。如何为金额字段申请金额?

Test.objects.filter(id__in=[1,2,3]).aggregate(Sum('amount'))
Run Code Online (Sandbox Code Playgroud)

我正在Django=1.9.1为此使用。

django django-orm

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

Django:注释缺失的日期

我想知道在特定时间段内我每天收到多少订单。

我的订单模型如下所示:

class Order(models.Model):

...
    bookingdate         = models.DateTimeField(default=timezone.now)
...
Run Code Online (Sandbox Code Playgroud)

我当前的 Django“查询”看起来像这样:

query = Order.objects.filter(bookingdate__gte=startdate, bookingdate__lte=enddate)
query = query.annotate(created_date=TruncDate('bookingdate')).values('created_date').annotate(
            sum=Count('created_date')).values('created_date', 'sum')
Run Code Online (Sandbox Code Playgroud)

我目前的问题是我只列出每天至少发生一个订单的日期。但我还想列出 0 个订单的日期。

例如,我现在得到一个这样的“列表”:

12.12.2018 => 3
14.12.2018 => 1
17.12.2018 => 2
Run Code Online (Sandbox Code Playgroud)

但我也想要介于两者之间的日期。例子:

12.12.2018 => 3
13.12.2018 => 0
14.12.2018 => 1
15.12.2018 => 0
16.12.2018 => 0
17.12.2018 => 2
Run Code Online (Sandbox Code Playgroud)

知道我该怎么做吗?

django django-orm

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

如何使用使用不同类型的多个字段的 graphene-django 和 Relay 创建自定义过滤器?

问题

你好,

我在 Python 3.7 中使用 Graphene Django 和 Graphene Relay。我正在尝试使用 Django 过滤器为 GraphQL 中的请求创建一个自定义过滤器。

我的桌子看起来像这样:

| id(type: int) | flow(type: varchar) | datetime(type: datetime) | duration(type: int) |
|---------------|---------------------|--------------------------|---------------------|
| 1             | aaa                 | 2019-07-06 08:59:00      | 113095465           |
| 2             | xxx                 | 2019-07-06 08:59:00      | 113095465           |
| 3             | bbb                 | 2019-07-06 08:59:00      | 113095465           |
Run Code Online (Sandbox Code Playgroud)

我希望能够使用 GraphQL 执行这种 SQL 请求:

| id(type: int) | flow(type: varchar) | datetime(type: datetime) | duration(type: int) |
|---------------|---------------------|--------------------------|---------------------|
| …
Run Code Online (Sandbox Code Playgroud)

python django django-orm django-filter graphene-django

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

Django ORM:相当于 SQL`NOT IN`?`exclude` 和 `Q` 对象不起作用

问题

我正在尝试使用 Django ORM 来执行 SQLNOT IN子句的等效操作,在子选择中提供 ID 列表以从日志记录表中带回一组记录。我不知道这是否可能。

该模型

class JobLog(models.Model):
    job_number = models.BigIntegerField(blank=True, null=True)
    name = models.TextField(blank=True, null=True)
    username = models.TextField(blank=True, null=True)
    event = models.TextField(blank=True, null=True)
    time = models.DateTimeField(blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

我试过的

我的第一次尝试是使用exclude,但这确实NOT否定了整个Subquery,而不是所需的NOT IN

query = (
    JobLog.objects.values(
        "username", "job_number", "name", "time",
    )
    .filter(time__gte=start, time__lte=end, event="delivered")
    .exclude(
        job_number__in=models.Subquery(
            JobLog.objects.values_list("job_number", flat=True).filter(
                time__gte=start, time__lte=end, event="finished",
            )
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

不幸的是,这产生了这个 SQL:

SELECT "view_job_log"."username", "view_job_log"."group", "view_job_log"."job_number", "view_job_log"."name", "view_job_log"."time"
FROM "view_job_log"
WHERE ( …
Run Code Online (Sandbox Code Playgroud)

python django postgresql django-models django-orm

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

不支持对 CharField 进行“lower”查找或不允许在该字段上进行连接

我正在尝试对查询集执行稍微更高级的查找,如下所述:https: //docs.djangoproject.com/en/3.0/topics/db/search/

我的查询集如下:

            queryset = queryset.filter(
                Q(user__username__unaccent__lower__trigram_similar=search) |
                Q(user__first_name__unaccent__lower__trigram_similar=search) |
                Q(user__last_name__unaccent__lower__trigram_similar=search)
            )
Run Code Online (Sandbox Code Playgroud)

我已将该django.contrib.postgres应用程序包含在我的settings.py.

但是,我收到以下错误:

django.core.exceptions.FieldError: Unsupported lookup 'lower' for CharField or join on the field not permitted.

有谁知道搜索搜索的正确程序?

我正在使用 Django >3 和 postgres 引擎版本 11。

django postgresql django-orm

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