小编Moi*_*Moi的帖子

使用自定义断点和角度/弹性布局显示/隐藏

我正在使用Angular(v5.0.2)和Angular-FlexLayout(v2.0.0-beta.10-4905443)。我正在尝试对@ angular / flex-layout提供的每个指令使用自定义断点。

我添加了自定义断点:

import {DEFAULT_BREAKPOINTS, BREAKPOINTS} from '@angular/flex-layout';

const CUSTOM_BREAKPOINTS = [
  {
    alias: 'sm.landscape',
    suffix: 'SmLandscape',
    mediaQuery: 'screen and (min-width:55em) and (max-width: 80em) and (orientation: landscape)',
    overlapping: true
  }
];

export const CustomBreakPointsProvider = {
  provide: BREAKPOINTS,
  useValue: [...DEFAULT_BREAKPOINTS,...CUSTOM_BREAKPOINTS],
};
Run Code Online (Sandbox Code Playgroud)

我扩展了ShowHideDirective:

import { Directive, ElementRef, Renderer2, Input, Optional, Self } from '@angular/core'
import { ShowHideDirective, negativeOf, LayoutDirective, MediaMonitor } from '@angular/flex-layout'

@Directive({
  selector: `
    [fxHide.sm.landscape],
    [fxShow.sm.landscape],
  `
})
export class CustomShowHideDirective extends ShowHideDirective {
  constructor(monitor: MediaMonitor, @Optional() …
Run Code Online (Sandbox Code Playgroud)

angular-flex-layout angular

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

使用 Django ORM 预取间接相关的项目

我正在尝试优化我的审核系统的查询,使用 Django 和 DRF 构建。我目前坚持重复检索:目前,我有类似的东西

class AdminSerializer(ModelSerializer):
    duplicates = SerializerMethodField()

    def get_duplicates(self, item):
        if item.allowed:
            qs = []
        else:
            qs = Item.objects.filter(
                    allowed=True, 
                    related_stuff__language=item.related_stuff.language
                ).annotate(
                    similarity=TrigramSimilarity('name', item.name)
                ).filter(similarity__gt=0.2).order_by('-similarity')[:10]
    return AdminMinimalSerializer(qs, many=True).data
Run Code Online (Sandbox Code Playgroud)

这工作正常,但至少为每个要显示的项目执行一个额外的查询。另外,如果有重复项,我会做额外的查询来填充AdminMinimalSerializer,其中包含重复项的字段和相关对象。我可能可以通过使用prefetch_related内部序列化程序来减少开销,但这并不能阻止我对每个项目进行多次查询(假设我只有一个相关项目要预取AdminMinimalSerializer,我仍然有 ~2N + 1 个查询:1项,N 为重复项,N 为重复项的相关项)。

我已经看过了Subquery,但是我无法检索一个对象,只能检索一个 id,这在我的情况下还不够。我尝试在Prefetch对象和.annotate.

我也尝试过类似的东西Item.filter(allowed=False).prefetch(Prefetch("related_stuff__language__related_stuff_set__items", queryset=Items.filter..., to_attr="duplicates")),但该duplicates属性被添加到“related_stuff__language__related_stuff_set”,所以我不能真正使用它......

我欢迎任何想法;)

编辑:真正的代码在这里。下面的玩具示例:

# models.py
from django.db.models import Model, CharField, ForeignKey, CASCADE, BooleanField

class Book(Model):
    title = CharField(max_length=250)
    serie …
Run Code Online (Sandbox Code Playgroud)

django query-optimization django-orm

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