(
request: Request,
resource: str = Path(...),
pk: str = Path(...),
model_resource: ModelResource = Depends(get_model_resource),
resources=Depends(get_resources),
model=Depends(get_model),
)
| 77 | |
| 78 | @router.post("/{resource}/update/{pk}") |
| 79 | async 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}") |
nothing calls this directly
no test coverage detected