mirror of
https://github.com/fastapi-admin/fastapi-admin.git
synced 2025-08-14 18:58:13 +08:00
bug fix
This commit is contained in:
@ -6,8 +6,7 @@ from fastapi import FastAPI
|
|||||||
from starlette.middleware.cors import CORSMiddleware
|
from starlette.middleware.cors import CORSMiddleware
|
||||||
from starlette.responses import RedirectResponse
|
from starlette.responses import RedirectResponse
|
||||||
from starlette.staticfiles import StaticFiles
|
from starlette.staticfiles import StaticFiles
|
||||||
from starlette.status import (HTTP_403_FORBIDDEN, HTTP_404_NOT_FOUND,
|
from starlette.status import HTTP_403_FORBIDDEN, HTTP_404_NOT_FOUND, HTTP_500_INTERNAL_SERVER_ERROR
|
||||||
HTTP_500_INTERNAL_SERVER_ERROR)
|
|
||||||
from tortoise.contrib.fastapi import register_tortoise
|
from tortoise.contrib.fastapi import register_tortoise
|
||||||
|
|
||||||
from examples import settings
|
from examples import settings
|
||||||
@ -15,9 +14,11 @@ from examples.constants import BASE_DIR
|
|||||||
from examples.models import Admin
|
from examples.models import Admin
|
||||||
from examples.providers import LoginProvider
|
from examples.providers import LoginProvider
|
||||||
from fastapi_admin.app import app as admin_app
|
from fastapi_admin.app import app as admin_app
|
||||||
from fastapi_admin.exceptions import (forbidden_error_exception,
|
from fastapi_admin.exceptions import (
|
||||||
not_found_error_exception,
|
forbidden_error_exception,
|
||||||
server_error_exception)
|
not_found_error_exception,
|
||||||
|
server_error_exception,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def create_app():
|
def create_app():
|
||||||
|
@ -25,8 +25,8 @@ async def get_model_resource(request: Request, model=Depends(get_model)):
|
|||||||
raise HTTPException(status_code=HTTP_404_NOT_FOUND)
|
raise HTTPException(status_code=HTTP_404_NOT_FOUND)
|
||||||
actions = await model_resource.get_actions(request)
|
actions = await model_resource.get_actions(request)
|
||||||
bulk_actions = await model_resource.get_bulk_actions(request)
|
bulk_actions = await model_resource.get_bulk_actions(request)
|
||||||
model_resource.actions = actions
|
setattr(model_resource, "actions", actions)
|
||||||
model_resource.bulk_actions = bulk_actions
|
setattr(model_resource, "bulk_actions", bulk_actions)
|
||||||
return model_resource
|
return model_resource
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,8 +4,7 @@ from typing import Type
|
|||||||
|
|
||||||
from aioredis import Redis
|
from aioredis import Redis
|
||||||
from fastapi import Depends, Form
|
from fastapi import Depends, Form
|
||||||
from starlette.middleware.base import (BaseHTTPMiddleware,
|
from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint
|
||||||
RequestResponseEndpoint)
|
|
||||||
from starlette.requests import Request
|
from starlette.requests import Request
|
||||||
from starlette.responses import RedirectResponse
|
from starlette.responses import RedirectResponse
|
||||||
from starlette.status import HTTP_303_SEE_OTHER, HTTP_401_UNAUTHORIZED
|
from starlette.status import HTTP_303_SEE_OTHER, HTTP_401_UNAUTHORIZED
|
||||||
|
@ -6,8 +6,7 @@ from starlette.requests import Request
|
|||||||
from tortoise import ForeignKeyFieldInstance, ManyToManyFieldInstance
|
from tortoise import ForeignKeyFieldInstance, ManyToManyFieldInstance
|
||||||
from tortoise import Model as TortoiseModel
|
from tortoise import Model as TortoiseModel
|
||||||
from tortoise.fields import BooleanField, DateField, DatetimeField, JSONField
|
from tortoise.fields import BooleanField, DateField, DatetimeField, JSONField
|
||||||
from tortoise.fields.data import (CharEnumFieldInstance, IntEnumFieldInstance,
|
from tortoise.fields.data import CharEnumFieldInstance, IntEnumFieldInstance, IntField, TextField
|
||||||
IntField, TextField)
|
|
||||||
from tortoise.queryset import QuerySet
|
from tortoise.queryset import QuerySet
|
||||||
|
|
||||||
from fastapi_admin.enums import Method
|
from fastapi_admin.enums import Method
|
||||||
@ -90,7 +89,9 @@ class Model(Resource):
|
|||||||
|
|
||||||
async def get_actions(self, request: Request) -> List[Action]:
|
async def get_actions(self, request: Request) -> List[Action]:
|
||||||
return [
|
return [
|
||||||
Action(label=_("update"), icon="ti ti-edit", name="update", method=Method.PUT),
|
Action(
|
||||||
|
label=_("update"), icon="ti ti-edit", name="update", method=Method.GET, ajax=False
|
||||||
|
),
|
||||||
Action(label=_("delete"), icon="ti ti-trash", name="delete", method=Method.DELETE),
|
Action(label=_("delete"), icon="ti ti-trash", name="delete", method=Method.DELETE),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ async def update(
|
|||||||
.get()
|
.get()
|
||||||
.prefetch_related(*model_resource.get_m2m_field())
|
.prefetch_related(*model_resource.get_m2m_field())
|
||||||
)
|
)
|
||||||
inputs = await model_resource.get_inputs(obj)
|
inputs = await model_resource.get_inputs(request, obj)
|
||||||
if "save" in form.keys():
|
if "save" in form.keys():
|
||||||
context = {
|
context = {
|
||||||
"request": request,
|
"request": request,
|
||||||
@ -142,7 +142,7 @@ async def update_view(
|
|||||||
model=Depends(get_model),
|
model=Depends(get_model),
|
||||||
):
|
):
|
||||||
obj = await model.get(pk=pk)
|
obj = await model.get(pk=pk)
|
||||||
inputs = await model_resource.get_inputs(obj)
|
inputs = await model_resource.get_inputs(request, obj)
|
||||||
context = {
|
context = {
|
||||||
"request": request,
|
"request": request,
|
||||||
"resources": resources,
|
"resources": resources,
|
||||||
|
@ -4,7 +4,7 @@ from datetime import date
|
|||||||
from typing import Any, List
|
from typing import Any, List
|
||||||
from urllib.parse import urlencode
|
from urllib.parse import urlencode
|
||||||
|
|
||||||
from jinja2 import contextfilter
|
from jinja2 import pass_context
|
||||||
from starlette.requests import Request
|
from starlette.requests import Request
|
||||||
from starlette.templating import Jinja2Templates
|
from starlette.templating import Jinja2Templates
|
||||||
|
|
||||||
@ -19,11 +19,9 @@ templates.env.globals["VERSION"] = VERSION
|
|||||||
templates.env.globals["NOW_YEAR"] = date.today().year
|
templates.env.globals["NOW_YEAR"] = date.today().year
|
||||||
templates.env.add_extension("jinja2.ext.i18n")
|
templates.env.add_extension("jinja2.ext.i18n")
|
||||||
templates.env.add_extension("jinja2.ext.autoescape")
|
templates.env.add_extension("jinja2.ext.autoescape")
|
||||||
templates.env.add_extension("jinja2.ext.with_")
|
|
||||||
templates.env.add_extension("jinja2.ext.do")
|
|
||||||
|
|
||||||
|
|
||||||
@contextfilter
|
@pass_context
|
||||||
def current_page_with_params(context: dict, params: dict):
|
def current_page_with_params(context: dict, params: dict):
|
||||||
request = context.get("request") # type:Request
|
request = context.get("request") # type:Request
|
||||||
full_path = request.scope["raw_path"].decode()
|
full_path = request.scope["raw_path"].decode()
|
||||||
|
@ -2,9 +2,7 @@
|
|||||||
<label class="form-label">{{ label }}</label>
|
<label class="form-label">{{ label }}</label>
|
||||||
<textarea {% if not null %}required{% endif %} class="form-control" name="{{ name }}"
|
<textarea {% if not null %}required{% endif %} class="form-control" name="{{ name }}"
|
||||||
placeholder="{{ placeholder }}"
|
placeholder="{{ placeholder }}"
|
||||||
{% if disabled %}disabled{% endif %}>
|
{% if disabled %}disabled{% endif %}>{{ value }}</textarea>
|
||||||
{{ value }}
|
|
||||||
</textarea>
|
|
||||||
{% if help_text %}
|
{% if help_text %}
|
||||||
<small class="form-hint">
|
<small class="form-hint">
|
||||||
{{ help_text }}
|
{{ help_text }}
|
||||||
|
Reference in New Issue
Block a user