mirror of
https://github.com/fastapi-admin/fastapi-admin.git
synced 2025-08-16 11:54:15 +08:00
Render FK values inside resource list view
This commit is contained in:
@ -28,8 +28,11 @@ async def list_view(
|
|||||||
):
|
):
|
||||||
fields_label = model_resource.get_fields_label()
|
fields_label = model_resource.get_fields_label()
|
||||||
fields = model_resource.get_fields()
|
fields = model_resource.get_fields()
|
||||||
|
fk_fields = model_resource.get_fk_field()
|
||||||
qs = model.all()
|
qs = model.all()
|
||||||
params, qs = await model_resource.resolve_query_params(request, dict(request.query_params), qs)
|
params, qs = await model_resource.resolve_query_params(
|
||||||
|
request, dict(request.query_params), qs
|
||||||
|
)
|
||||||
filters = await model_resource.get_filters(request, params)
|
filters = await model_resource.get_filters(request, params)
|
||||||
total = await qs.count()
|
total = await qs.count()
|
||||||
if page_size:
|
if page_size:
|
||||||
@ -37,10 +40,23 @@ async def list_view(
|
|||||||
else:
|
else:
|
||||||
page_size = model_resource.page_size
|
page_size = model_resource.page_size
|
||||||
qs = qs.offset((page_num - 1) * page_size)
|
qs = qs.offset((page_num - 1) * page_size)
|
||||||
values = await qs.values()
|
if fk_fields:
|
||||||
rendered_values, row_attributes, column_attributes, cell_attributes = await render_values(
|
objects = await qs.select_related(*fk_fields)
|
||||||
request, model_resource, fields, values
|
values = []
|
||||||
)
|
for obj in objects:
|
||||||
|
obj_as_dict = dict(obj)
|
||||||
|
for attr in fk_fields:
|
||||||
|
obj_as_dict[attr] = getattr(obj, attr)
|
||||||
|
values.append(obj_as_dict)
|
||||||
|
else:
|
||||||
|
values = await qs.values()
|
||||||
|
|
||||||
|
(
|
||||||
|
rendered_values,
|
||||||
|
row_attributes,
|
||||||
|
column_attributes,
|
||||||
|
cell_attributes,
|
||||||
|
) = await render_values(request, model_resource, fields, values)
|
||||||
context = {
|
context = {
|
||||||
"request": request,
|
"request": request,
|
||||||
"resources": resources,
|
"resources": resources,
|
||||||
@ -241,10 +257,14 @@ async def create(
|
|||||||
@router.delete("/{resource}/delete/{pk}")
|
@router.delete("/{resource}/delete/{pk}")
|
||||||
async def delete(request: Request, pk: str, model: Model = Depends(get_model)):
|
async def delete(request: Request, pk: str, model: Model = Depends(get_model)):
|
||||||
await model.filter(pk=pk).delete()
|
await model.filter(pk=pk).delete()
|
||||||
return RedirectResponse(url=request.headers.get("referer"), status_code=HTTP_303_SEE_OTHER)
|
return RedirectResponse(
|
||||||
|
url=request.headers.get("referer"), status_code=HTTP_303_SEE_OTHER
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@router.delete("/{resource}/delete")
|
@router.delete("/{resource}/delete")
|
||||||
async def bulk_delete(request: Request, ids: str, model: Model = Depends(get_model)):
|
async def bulk_delete(request: Request, ids: str, model: Model = Depends(get_model)):
|
||||||
await model.filter(pk__in=ids.split(",")).delete()
|
await model.filter(pk__in=ids.split(",")).delete()
|
||||||
return RedirectResponse(url=request.headers.get("referer"), status_code=HTTP_303_SEE_OTHER)
|
return RedirectResponse(
|
||||||
|
url=request.headers.get("referer"), status_code=HTTP_303_SEE_OTHER
|
||||||
|
)
|
||||||
|
Reference in New Issue
Block a user