小编mas*_*oda的帖子

Django ManyToMany通过多个数据库

TLTR: Django 在SQL查询中不包含数据库名称,我可以以某种方式强制它执行此操作还是有解决方法?

长版:

我有两个遗留的 MySQL 数据库(注意:我对数据库布局没有影响),我正在使用Django 1.11和python 3.6上的DRF 创建一个只读API

我正在使用此处建议的SpanningForeignKey字段来解决MyISAM DB的参照完整性限制:https://stackoverflow.com/a/32078727/7933618

我正在尝试通过MultiToMany通过DB1上的表将DB1中的表连接到DB2中的表.这是Django正在创建的查询:

SELECT "table_b"."id" FROM "table_b" INNER JOIN "throughtable" ON ("table_b"."id" = "throughtable"."b_id") WHERE "throughtable"."b_id" = 12345
Run Code Online (Sandbox Code Playgroud)

这当然给了我一个错误"表'DB2.throughtable'不存在",因为viatable在DB1上,我不知道如何强制Django使用DB名称为表添加前缀.查询应该是:

SELECT table_b.id FROM DB2.table_b INNER JOIN DB1.throughtable ON (table_b.id = throughtable.b_id) WHERE throughtable.b_id = 12345
Run Code Online (Sandbox Code Playgroud)

app1的 型号db1_app/models.py:(DB1)

class TableA(models.Model):
    id = models.AutoField(primary_key=True)
    # some other fields
    relations = models.ManyToManyField(TableB, through='Throughtable')

class Throughtable(models.Model):
    id = models.AutoField(primary_key=True)
    a_id = models.ForeignKey(TableA, to_field='id')
    b_id = …
Run Code Online (Sandbox Code Playgroud)

python mysql django django-database

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

角4可重复使用的组件和模板

我坚持在Angular 4中创建一个可重用的组件.我有一堆报告都包含一个搜索表单(每个报告的字段不同)和一个材料表结果列表(每个报告的字段列表不同).当我为每个报告复制整个组件时,它按预期工作,但我想将其重构为可重用的组件/模板和扩展它的子组件.但范围都是错误的,我无法理解这是如何工作的.

report.component.ts(可重用组件)

import {Component, ViewChild} from '@angular/core';
import {MatPaginator} from '@angular/material';

import 'rxjs/add/operator/map';

import {ReportsDataSource} from '../services/reports-datasource.service';

@Component({
    selector: 'app-report',
    templateUrl: './report.component.html',
})
export class ReportComponent {
    @ViewChild(MatPaginator) paginator: MatPaginator;

    /** result table columns */
    columns = [];

    /** Column definitions in order */
    displayedColumns = this.columns.map(x => x.columnDef);

    /** empty search parameters object, used for form field binding */

    /** datasource service */
    dataSource: ReportsDataSource;

    /** submit the form */
    getData() {
        this.dataSource.getData();
    }
}
Run Code Online (Sandbox Code Playgroud)

report.component.html(可重用模板) …

angular-template angular-components angular

6
推荐指数
1
解决办法
4081
查看次数

Angular:从资产文件夹中读取所有文件

tltr:我可以从 angular 访问资产目录吗?

我在一个文件夹src/assets/icons中有一堆 SVG ,我使用mat-icon. 唯一的缺点是当我添加一个新图标时,我必须添加文件,我必须将文件名添加到我用来循环添加到matIconRegistry. 有没有办法简单地从目录中读取所有文件?

这是我目前的解决方案:

@NgModule()
export class CustomIconModule {
  constructor(
    private matIconRegistry: MatIconRegistry,
    private domSanitizer: DomSanitizer
  ) {
    const icons = [
      'icon1', 'icon2',
    ];

    for (const icon of icons) {
      this.matIconRegistry.addSvgIconInNamespace(
        'my-namespace',
        icon,
        domSanitizer.bypassSecurityTrustResourceUrl(`./assets/icons/${icon}.svg`)
      );
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

更新:我编写了一个 bash 脚本,它循环遍历文件,生成一个 .ts 文件,其中包含所有文件名的数组并执行 .ts 文件git add。我在 pre-commit git hook 中运行它。不理想,但它现在有点工作。不过,我很想找到一个纯 JS 解决方案。

angular-material2 angular

5
推荐指数
0
解决办法
3480
查看次数

Django 表达式 DateTime 和 Integer 秒

我想用 Django 1.11 注释旧版 MySQL DB 上的 DateTime 和 Integer(秒)之间的差异(因此没有机会将 IntegerField 更改为 DurationField)

Report(Model):
    # time the report was sent
    time = DateTimeField()
    # seconds since the last reboot
    uptime = IntegerField()

MyModel.objects.all().annotate(
    last_report=Max(time),
    last_reboot=ExpressionWrapper(F('last_report') - F('uptime')), output_field=DateTimeField())
)
Run Code Online (Sandbox Code Playgroud)

如果是 DurationField(),则这可以工作uptime,但不适用于整数。所以我尝试将秒转换为时间增量

last_reboot=ExpressionWrapper(
    F('last_report') - F(timezone.timedelta(seconds=1)*F('uptime')),
    output_field=DateTimeField()
)
Run Code Online (Sandbox Code Playgroud)

这给了我

属性错误位于...

“CombinedExpression”对象没有属性“split”

有没有办法在查询表达式中使用 DateTimeField() 和 IntegerField() 进行计算?

python django django-models django-queryset

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