MCPcopy
hub / github.com/fastapi-admin/fastapi-admin / update

Function update

fastapi_admin/routes/resources.py:79–132  ·  view source on GitHub ↗
(
    request: Request,
    resource: str = Path(...),
    pk: str = Path(...),
    model_resource: ModelResource = Depends(get_model_resource),
    resources=Depends(get_resources),
    model=Depends(get_model),
)

Source from the content-addressed store, hash-verified

77
78@router.post("/{resource}/update/{pk}")
79async def update(
80 request: Request,
81 resource: str = Path(...),
82 pk: str = Path(...),
83 model_resource: ModelResource = Depends(get_model_resource),
84 resources=Depends(get_resources),
85 model=Depends(get_model),
86):
87 form = await request.form()
88 data, m2m_data = await model_resource.resolve_data(request, form)
89 async with in_transaction() as conn:
90 obj = (
91 await model.filter(pk=pk)
92 .using_db(conn)
93 .select_for_update()
94 .get()
95 .prefetch_related(*model_resource.get_m2m_field())
96 )
97 await obj.update_from_dict(data).save(using_db=conn)
98 for k, items in m2m_data.items():
99 m2m_obj = getattr(obj, k)
100 await m2m_obj.clear()
101 if items:
102 await m2m_obj.add(*items)
103 obj = (
104 await model.filter(pk=pk)
105 .using_db(conn)
106 .get()
107 .prefetch_related(*model_resource.get_m2m_field())
108 )
109 inputs = await model_resource.get_inputs(request, obj)
110 if "save" in form.keys():
111 context = {
112 "request": request,
113 "resources": resources,
114 "resource_label": model_resource.label,
115 "resource": resource,
116 "model_resource": model_resource,
117 "inputs": inputs,
118 "pk": pk,
119 "page_title": model_resource.page_title,
120 "page_pre_title": model_resource.page_pre_title,
121 }
122 try:
123 return templates.TemplateResponse(
124 f"{resource}/update.html",
125 context=context,
126 )
127 except TemplateNotFound:
128 return templates.TemplateResponse(
129 "update.html",
130 context=context,
131 )
132 return redirect(request, "list_view", resource=resource)
133
134
135@router.get("/{resource}/update/{pk}")

Callers

nothing calls this directly

Calls 4

redirectFunction · 0.90
resolve_dataMethod · 0.80
get_m2m_fieldMethod · 0.80
get_inputsMethod · 0.80

Tested by

no test coverage detected