Skip to content

Commit 0f82081

Browse files
committed
修复传入参数问题
1 parent 31f4b93 commit 0f82081

File tree

7 files changed

+70
-32
lines changed

7 files changed

+70
-32
lines changed

fast_tmp/admin/site.py

Lines changed: 40 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,49 @@
1-
from fast_tmp.models import Group, User
1+
from typing import Any, Dict
2+
3+
from requests import Request
4+
from tortoise import Model
5+
6+
from fast_tmp.models import Group, Permission, User
27
from fast_tmp.site import ModelAdmin
8+
from fast_tmp.site.field import Password
39

410

511
class UserAdmin(ModelAdmin):
612
model = User
7-
list_display = ("id", "username", "is_active")
8-
inline = ("is_active",)
9-
create_fields = ("username", "password", "groups", "permissions")
10-
update_fields = ("groups", "permissions")
11-
# create_fields = (User.username, User.password)
12-
# update_fields = (User.password,)
13-
14-
# @classmethod
15-
# def create_model(cls, data: dict, session: Session) -> Any:
16-
# user = super().create_model(data, session)
17-
# user.set_password(data["password"])
18-
# return user
19-
#
20-
# @classmethod
21-
# def update_model(cls, model: User, data: dict, session: Session) -> Any:
22-
# super().update_model(model, data, session)
23-
# model.set_password(data["password"])
24-
# return model
13+
list_display = ("name", "username", "is_active", "is_superuser", "is_staff")
14+
inline = ("is_active", "is_superuser", "is_staff")
15+
create_fields = (
16+
"username",
17+
"password",
18+
"name",
19+
"groups",
20+
"permissions",
21+
"is_active",
22+
"is_superuser",
23+
"is_staff",
24+
)
25+
update_fields = (
26+
"username",
27+
"password",
28+
"name",
29+
"groups",
30+
"permissions",
31+
"is_active",
32+
"is_superuser",
33+
"is_staff",
34+
)
35+
fields = {"password": Password}
2536

2637

2738
class GroupAdmin(ModelAdmin):
2839
model = Group
29-
list_display = ("id", "name", "users", "permissions")
30-
create_fields = ("name", "permissions")
31-
update_fields = ("name", "permissions")
32-
# create_fields = (Group.name, Group.users)
33-
# update_fields = (Group.name, Group.users)
40+
list_display = ("name", "users", "permissions")
41+
create_fields = ("name", "users", "permissions")
42+
update_fields = ("name", "users", "permissions")
43+
44+
45+
class PermissionAdmin(ModelAdmin):
46+
model = Permission
47+
list_display = ("label", "codename", "users", "groups")
48+
create_fields = ("label", "codename", "users", "groups")
49+
update_fields = ("label", "codename", "users", "groups")

fast_tmp/models.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,9 @@ def __repr__(self):
6565
class User(Model):
6666
username = fields.CharField(max_length=128, unique=True)
6767
password = fields.CharField(max_length=255)
68+
name = fields.CharField(max_length=128)
6869
is_active = fields.BooleanField(default=True)
70+
is_staff = fields.BooleanField(default=False) # todo 为true才可以访问后台
6971
is_superuser = fields.BooleanField(default=False)
7072
groups: fields.ManyToManyRelation["Group"]
7173
permissions: fields.ManyToManyRelation[Permission] = fields.ManyToManyField(
@@ -119,7 +121,7 @@ async def has_perms(self, codenames: Tuple[str, ...]) -> bool:
119121
return True
120122

121123
def __str__(self):
122-
return self.username
124+
return self.name
123125

124126

125127
class Group(Model):

fast_tmp/site/__init__.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ def get_create_dialogation_button(self, request: Request):
132132
body=Form(
133133
name=f"新增{self.name}",
134134
title=f"新增{self.name}",
135+
# fixme 你的field字段传实例了吗?
135136
body=[(i.get_control(request)) for i in controls.values()],
136137
api=f"post:{self.prefix}/create",
137138
),
@@ -326,12 +327,20 @@ def make_fields(self):
326327
s.extend(self.update_fields)
327328
s = set(s)
328329
for field in s:
329-
if not self.fields.get(field):
330+
field_ = self.fields.get(field)
331+
if not field_:
330332
field_type = self.model._meta.fields_map.get(field)
331333
if not field_type:
332334
logger.error(f"can not found field {field} in {self.model.__name__}")
333335
continue
334336
self.fields[field] = create_column(field, field_type, self._prefix)
337+
else:
338+
if callable(field_):
339+
field_type = self.model._meta.fields_map.get(field)
340+
if not field_type:
341+
logger.error(f"can not found field {field} in {self.model.__name__}")
342+
continue
343+
self.fields[field] = field_(name=field, field=field_type, prefix=self.prefix)
335344

336345
def get_control_field(self, name: str) -> BaseAdminControl:
337346
ret = self.fields.get(name)

fast_tmp/site/field.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from typing import Any
2+
3+
from fast_tmp.contrib.auth.hashers import make_password
4+
from fast_tmp.site.util import StrControl
5+
6+
7+
class Password(StrControl):
8+
def amis_2_orm(self, value: Any) -> Any:
9+
return make_password(value)

fast_tmp/site/util.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,9 @@ async def set_value(self, request: Request, obj: Model, value: Any):
8080
async def get_value(self, request: Request, obj: Model) -> Any:
8181
return self.orm_2_amis(getattr(obj, self.name))
8282

83-
def __init__(self, name: str, _field: fields.Field, _prefix: str, **kwargs):
84-
super().__init__(name, _prefix, **kwargs)
85-
self._field = _field # type: ignore
83+
def __init__(self, name: str, field: fields.Field, prefix: str, **kwargs):
84+
super().__init__(name, prefix, **kwargs)
85+
self._field = field # type: ignore
8686
self.name = name
8787
self.label = kwargs.get("label") or self.name
8888

fast_tmp_cli/__init__.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,15 @@
2020
@async_to_sync
2121
async def create_superuser(username: str, password: str):
2222
from tortoise import Tortoise
23-
await Tortoise.init(config=settings.TORTOISE_ORM)
23+
try:
24+
await Tortoise.init(config=settings.TORTOISE_ORM)
25+
except AttributeError as e:
26+
raise ValueError("may not config FASTAPI_SETTINGS_MODULE or "+str(e))
2427
from fast_tmp.models import User
2528
if await User.filter(username=username).exists():
2629
print(f"{username} 已经存在了")
2730
exit(1)
28-
user = User(username=username, is_superuser=True)
31+
user = User(username=username, is_superuser=True,is_staff=True,name=username)
2932
user.set_password(password)
3033
await user.save()
3134
sys.stdout.write(f"创建{username}成功\n")

tests/test_example/test_example/settings.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
"models": [
1414
"test_example.models",
1515
"fast_tmp.models",
16-
# "aerich.models",
1716
], # 注册app.models
1817
"default_connection": "default",
1918
}

0 commit comments

Comments
 (0)