Articles
업데이트 모델 Django
On 2월 18, 2021 by admin어떻게 개선 할 수 있습니까? 크고보기 흉합니다. 조언이 있습니까?
API로부터 POST를 받고 있으며 null이 아닌 필드 만 업데이트하고 싶습니다.
titulo = request.data.get("titulo", "") image = request.data.get("image", "") price = request.data.get("price", "") wholesale_price = request.data.get("wholesale_price", "") reference = request.data.get("reference", "") ean13 = request.data.get("ean13", "") rating = request.data.get("rating", "") sales = request.data.get("sales", "") active = request.data.get("active", "") encilleria = request.data.get("encilleria", "") delivery = request.data.get("delivery", "") summary = request.data.get("summary", "") brand_id = request.data.get("brand_id", "") consejos = request.data.get("consejos", "") ingredientes = request.data.get("ingredientes", "") stock = request.data.get("stock", "") es_pack = request.data.get("es_pack", "") descontinuado = request.data.get("descontinuado", "") tags = request.data.get("tags", "") destacado_buscado = request.data.get("destacado_buscado", "") supplier_delivery = request.data.get("supplier_delivery", "") imagen_mala = request.data.get("imagen_mala", "") guia_cosmetica_attrs = request.data.get("guia_cosmetica_attrs", "") guia_cosmetica_cats = request.data.get("guia_cosmetica_cats", "") try: producto = Product.objects.get(pk=product_id) if titulo != "": producto.titulo = titulo if titulo != "": producto.slug = slugify(titulo) if image != "": producto.image = image if price != "": producto.price = price if wholesale_price != "": producto.wholesale_price = wholesale_price if reference != "": producto.reference = reference if ean13 != "": producto.ean13 = ean13 if rating != "": producto.rating = rating if sales != "": producto.sales = sales if active != "": producto.active = active if encilleria != "": producto.encilleria = encilleria if delivery != "": producto.delivery = delivery if summary != "": producto.summary = summary if brand_id != "": producto.brand_id = brand_id if consejos != "": producto.consejos = consejos if ingredientes != "": producto.ingredientes = ingredientes if stock != "": producto.stock = stock if es_pack != "": producto.es_pack = es_pack if descontinuado != "": producto.descontinuado = descontinuado if tags != "": producto.tags = tags if destacado_buscado != "": producto.destacado_buscado = destacado_buscado if supplier_delivery != "": producto.supplier_delivery = supplier_delivery if imagen_mala != "": producto.imagen_mala = imagen_mala if guia_cosmetica_attrs != "": producto.guia_cosmetica_attrs = guia_cosmetica_attrs if guia_cosmetica_cats != "": producto.guia_cosmetica_cats = guia_cosmetica_cats try: producto.save() except ValueError: return Response({"success": False, "msg": "Value Error"}) except ObjectDoesNotExist: return Response({"success": False, "msg": "Product does not exist"})
댓글
- 이 질문은 불완전합니다. 리뷰어가 더 나은 답변을 제공 할 수 있도록 질문에 충분한 컨텍스트를 추가하세요. 코드가하는 일과 그 목적이 무엇인지 자세히 알려 주면 검토자가 더 쉽게 도움을 줄 수 있습니다. 질문에는 코드의 기능에 대한 설명이 포함되어야합니다.
답변
.update()
쿼리 셋 메소드를 사용하고 압축을 풀 수 있습니다. request.data
사전 :
product.objects.filter(pk=product_id).update(**request.data)
또는 request.data
항목을 선택하고 setattr()
내장 함수 를 사용합니다.
producto = Product.objects.get(pk=product_id) for attr, value in request.data.items(): if value: # check if value is "truthy" - you may not need this check, please test setattr(producto, attr, value) producto.save()
slugify부분을 다르게 처리 할 수 있으며 처리해야합니다. 예를 들어, 모델의 save()
메서드를 재정의하고 titulo
가 제공됩니다- 여기에 예시 .
댓글
- 와, ' 굉장합니다. SQL 인젝션에 대해 ' 안전합니까?
- @MarcosAguayo 절대적으로 Django ORM과 i를 통과합니다. s 주입 안전. 감사합니다.
답글 남기기