Articles
Päivitä malli Django
On helmikuu 18, 2021 by adminKuinka voin parantaa tätä? Se on iso ja ruma. Onko neuvoja?
Saan POST: n sovellusliittymältä, ja haluan päivittää vain kentät, jotka eivät ole tyhjiä.
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"})
Kommentit
- Tämä kysymys on puutteellinen. Auta arvostelijoita antamaan sinulle parempia vastauksia lisäämällä kysymykseesi riittävä konteksti. Mitä enemmän kerrot meille mitä koodisi tekee ja mikä on sen tekemisen tarkoitus, sitä helpompaa arvostelijoiden on auttaa sinua. Kysymysten tulee sisältää kuvaus koodin toiminnasta
Vastaus
Voit käyttää .update()
-kyselymenetelmää ja purkaa request.data
sanakirja:
product.objects.filter(pk=product_id).update(**request.data)
Tai voit siirtyä request.data
kohteita ja käytä setattr()
sisäänrakennettua toimintoa :
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()
Huomaa, että voit ja sinun tulee käsitellä ”slugify” -osaa eri tavalla – esimerkiksi ohittaa malli ”s save()
-menetelmä ja luoda etana, jos titulo
annetaan – esimerkki tästä .
Kommentit
- Vau, että ' on mahtava! Se ' on suojattu SQL-injektiota vastaan?
- @MarcosAguayo ehdottomasti, se käy läpi Django ORM: n ja minä s injektio turvallinen. Kiitos.
Vastaa