小编Max*_*ore的帖子

Django 查询集更新方法从查询集中删除对象

这不是预期的行为:

items = Item.objects.filter(sent=False)

items.count() # 3

items.update(sent=True)

items.count() # 0
Run Code Online (Sandbox Code Playgroud)

如何在不丢失查询集中的对象的情况下更新对象?

django django-orm django-queryset

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

使用简单的JSON字段加速Django和Postgres

我有一个非常复杂的模型,有许多FK和M2M的相关模型,它们也有很多关系,等等.

因此,呈现此类对象的列表是一项非常昂贵的SQL操作,我想对其进行优化.(select_related和prefetch_related帮助,但有点)

我可能有一个非常愚蠢但非常简单的想法.

要做这样的事情:

class VeryComplexModel(models.Model):

    # some_field
    # some_field
    # ...

    json = models.TextField()

    def save(self):
        json = serialize(self)
Run Code Online (Sandbox Code Playgroud)

在views.py中:

complexModels = ComplexModel.objects.get_values(json)
Run Code Online (Sandbox Code Playgroud)

在模板中:

{% for m in complexModels %}

    {{ m.some_field }}

    {{ m.some_field.some_fields.some_field }}

{% endif %}
Run Code Online (Sandbox Code Playgroud)

这是个坏主意吗?也许这是一个好主意,但我应该使用更合适的东西,如特殊的JSON字段或其他东西?

伟大的建议!

django postgresql query-optimization

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

Svelte - 在常规道具传递上使用 Context API (setContext/getContext)

这是一个简单的例子:

<script>
    import Button from './Button.svelte';

    let text = 'Click me!';
    let sayHello = () => alert('Hello!');
</script>

<Button {text} {sayHello}/>
<Button {text} {sayHello}/>
<Button {text} {sayHello}/>
Run Code Online (Sandbox Code Playgroud)

如果我做对了,因为可能有很多<Button {text} {sayHello}/>,所以省略以某种方式传递的道具会很好

这里来上下文API

<script>
    import Button from './Button.svelte';
    import { setContext } from 'svelte';
    import { text, sayHello } from './data.js';

    setContext(text, 'Click me!');
    setContext(sayHello, () => alert('Hello!'));
</script>

<Button/>
<Button/>
<Button/>
Run Code Online (Sandbox Code Playgroud)

并且在某处./Button.sveltegetContext()使用等


那么,省略类似道具传递的能力是使用 Svelte 的Context API的唯一原因吗?

javascript svelte

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

Django将已知的精确字符串作为url参数传递

我在调度员中有两个网址指向相同的视图

path('posts/top/', posts, name='top'),
path('posts/new/', posts, name='new'),
Run Code Online (Sandbox Code Playgroud)

我希望查看开始如下:

def posts(request, ordering):
    ...
Run Code Online (Sandbox Code Playgroud)

我想,传递topnew作为参数应该是这样的:

path('posts/<ordering:top>/', posts, name='top'),
path('posts/<ordering:new>/', posts, name='new'),
Run Code Online (Sandbox Code Playgroud)

但它给了我:

django.core.exceptions.ImproperlyConfigured: URL route 'posts/<ordering:top>/' uses invalid converter 'ordering'.
Run Code Online (Sandbox Code Playgroud)

所以,作为一个解决方法我使用它,但它看起来有点脏:

path('posts/top/', posts, name='top', kwargs={'order': 'top'}),
path('posts/new/', posts, name='new', kwargs={'order': 'top'}),
Run Code Online (Sandbox Code Playgroud)

做正确的方法是什么?

django django-urls

0
推荐指数
1
解决办法
777
查看次数

Svelte - 绑定在子组件的属性上

我有一个简单地隐藏内容的应用程序Hidden.svelte

<script>
    export let shown = false;
</script>

<svelte:options accessors={true}/>

{#if shown}
    <slot/>
{/if}
Run Code Online (Sandbox Code Playgroud)

在 parent 中一切正常App.svelte

<script>
    import Hidden from 'Hidden';

    let child;
</script>

<Hidden bind:this={child}>
    Content
</Hidden>

<button on:click={() => child.shown = true}>Show</button>
Run Code Online (Sandbox Code Playgroud)

但是,虽然我可以这样做,但我不能这样on:click={child.shown = true}做:

{#if child.shown}
    External message!
{/if}
Run Code Online (Sandbox Code Playgroud)

显然,我也不能这样做:

<div class:shown={child.shown}>Child component is shown</div>
Run Code Online (Sandbox Code Playgroud)

我想,这就是所有的,因为它在安装之前渲染,但是我所有的努力与玩onMount$:失败

它可以以某种方式实现吗?谢谢

编辑

对不起,大家,我已经尝试尽可能简单地举一个例子,并且做了一个完全不能反映我最初问题的例子,但是,从技术上讲,得到了正确的答案

所以,问题是,父级App.svelte没有反映child.shown直接在内部进行的更改Hidden.svelte

@ThomasHennes 建议使用商店来解决这个问题,但是,如果我做对了,这是单个应用程序实例的好方法,因此,对于那些感兴趣的人,我最终会遇到常规事件:

https://svelte.dev/repl/f467fe36446444f09a2a7633b1faa6a1?version=3.20.1

编辑 2

在接受的答案中解决了真正的问题

javascript svelte

0
推荐指数
1
解决办法
1505
查看次数