我试图用我自己的自定义类覆盖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?
我正在尝试在 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)
有没有一种方法可以比我更干净地创建这样的模拟?
我在 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)