小编ost*_*jan的帖子

Django(1.10)覆盖AdminSite

我试图用我自己的自定义类覆盖AdminSite类.我按照django的文档中的教程:https://docs.djangoproject.com/en/1.10/ref/contrib/admin/#customizing-adminsite但它没有用.具体来说,我想用我自己的类覆盖原始的AdminSite,而不只是在我的项目中添加另一个管理站点.

我创建了从类继承的自定义类MyAdminSite

from django.contrib.admin import AdminSite


class MyAdminSite(AdminSite):
    pass
Run Code Online (Sandbox Code Playgroud)

然后在我的app urls.py中添加:

from django.conf.urls import url, include
import django.contrib.admin as admin
from .admin_site import MyAdminSite

admin.site = MyAdminSite()
admin.autodiscover()


urlpatterns = [
    url(r'^', admin.site.urls),
]
Run Code Online (Sandbox Code Playgroud)

它似乎工作,但管理员模型注册到AdminAdite的MyAdminSite.

我尝试了三种注册模型到我的自定义网站:

@admin.register(Model)
class ModelAdmin(model.AdminModel):
...
Run Code Online (Sandbox Code Playgroud)

这种方式模型已注册到原始AdminSite.

第二种方式:

@admin.site.register(Model):
class ModelAdmin(model.AdminModel):
...
Run Code Online (Sandbox Code Playgroud)

这不起作用并导致异常.ModelAdmin类未传递给register方法.

最后一种方式

class ModelAdmin(model.AdminModel):
...
admin.site.register(Model, ModelAdmin)
Run Code Online (Sandbox Code Playgroud)

这是有效的,但在管理员网站上我只能看到我的模型不是来自Django管理员(用户和组)的模型.

如何永久覆盖admin.site并将所有模型注册到MyAdminSite?

python django

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

Typeorm 玩笑嘲笑

我正在尝试在 Jest 中模拟 Typeorm 模块功能之一,并且我想以最干净的方式来完成它。我设法创建的有效内容:

jest.mock("typeorm", () => ({
    __esModule: true,
    getCustomRepository: jest.fn(),
    PrimaryGeneratedColumn: jest.fn(),
    Column: jest.fn(),
    CreateDateColumn: jest.fn(),
    UpdateDateColumn: jest.fn(),
    Entity: jest.fn(),
    EntityRepository: jest.fn(),
    Repository: jest.fn(),
}));
Run Code Online (Sandbox Code Playgroud)

但我只想模拟getCustomReposity,当我只为该函数留下模拟时:

jest.mock("typeorm", () => ({
    __esModule: true,
    getCustomRepository: jest.fn(),
}));
Run Code Online (Sandbox Code Playgroud)

测试甚至无法运行,因为实体和存储库使用了 Typeorm 中的一些装饰器和类。我还尝试为整个模块生成模拟:

jest.mock("typeorm", () => jest.createMockFromModule("typeorm"));
Run Code Online (Sandbox Code Playgroud)

我收到生成的模拟装饰器错误:

TypeError: decorator is not a function
    2 |
    3 | @Entity({ name: "users" })
  > 4 | export class User {
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以比我更干净地创建这样的模拟?

unit-testing typescript jestjs typeorm ts-jest

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

如何发现 RecyclerView 已经完成更新?

我在 RecyclerView Adapter 中使用了 SortedList,我想知道在我更改 Adapter 中的数据后 RecyclerView 何时完成更新(并调用了正确的方法,例如 notifyItemRangeChanged)。有没有办法做到这一点?

我的问题是我需要在过滤其内容后将 RecyclerView 滚动到顶部。我从我的适配器上的 Activity 方法调用它过滤其成员上的项目。之后我只是在 RecyclerView 上调用 scrollToPosition(0) 并且它并不总是按预期工作,特别是当列表上的更改操作只有 1 个项目时。

这是我在适配器上调用的更新方法代码:

private SortedList<Game> games;
private ArrayList<Game> allGames;

public void search(String query) {
    replaceAll(filterGames(query));
}

public void replaceAll(Collection<Game> games) {
    this.games.beginBatchedUpdates();
    List<Game> gamesToRemove = new ArrayList<>();
    for (int i = 0; i < this.games.size(); i++) {
        Game game = this.games.get(i);
        if (!games.contains(game)) {
            gamesToRemove.add(game);
        }
    }
    for (Game game : gamesToRemove) {
        this.games.remove(game);
    }
    this.games.addAll(games);
    this.games.endBatchedUpdates();
}

private Collection<Game> filterGames(String …
Run Code Online (Sandbox Code Playgroud)

android android-recyclerview

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