Skip to content
Tiantan
Articles

Update model Django

Geplaatst op februari 18, 2021 door admin

Hoe kan ik dit verbeteren? Het is groot en lelijk. Enig advies?

Ik ontvang een POST van een API en ik wil alleen de velden bijwerken die niet null zijn.

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"}) 

Reacties

  • Deze vraag is onvolledig. Voeg voldoende context toe aan uw vraag om recensenten te helpen u betere antwoorden te geven. Hoe meer u ons vertelt over wat uw code doet en wat het doel ervan is, hoe gemakkelijker het voor recensenten is om u te helpen. Vragen moeten een beschrijving bevatten van wat de code doet

Antwoord

U kunt de .update() queryset-methode gebruiken en uitpakken de request.data woordenboek:

product.objects.filter(pk=product_id).update(**request.data) 

Of je kunt request.data items en gebruik de setattr() ingebouwde functie :

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() 

Merk op dat u het “slugify” -gedeelte anders kunt en moet behandelen – bijvoorbeeld door de save() -methode van het model te overschrijven en een slug te maken als een titulo wordt gegeven – voorbeeld hier .

Reacties

  • Wauw, dat ' is geweldig! Het is ' beveiligd tegen SQL-injectie toch?
  • @MarcosAguayo absoluut, het gaat door de Django ORM en ik s injectie-veilig. Bedankt.

Geschreven door admin

Geef een reactie Antwoord annuleren

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Meest recente berichten

  • Met behulp van een balun met een resonerende dipool
  • Wat is het verschil tussen “ kan niet ” en “ kan niet ”? [duplicate]
  • Kunt u zich bij JFK op binnenlandse vluchten tussen terminals aan de airside verplaatsen?
  • “ Zeer gewaardeerd ” of “ zeer gewaardeerd ”
  • Wat betekent ' abstracte ideeën '? [gesloten]

Archief

  • februari 2021
  • januari 2021
  • december 2020
  • november 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어

Auteursrecht Tiantan 2021 | Thema door Theme in Progress | Mogelijk gemaakt door WordPress

Naar boven