SKCONAN

[Django] เพิ่ม Object เช้าไปใน QuerySet

January 29, 2020

เกริ่นนนน

เนื่องจากว่าวันนี้ (2020/01/29) งานที่ผมทำอยู่จะต้องมีการเพิ่มข้อมูลต่อท้าย QuerySet เนื่องจากใน Database นั้นเก็บข้อมูลแค่ส่วนหนึ่งเท่านั้น โดยสิ่งที่เราเพิ่มเข้าไปจะเป็นแค่ temporary record เราเลยไม่ต้องบันทึกลง database จึงทำให้ผมตัดสินใจเพิ่มข้อมูลหลัง query เสร็จเพื่อให้ข้อมูลสมบูรณ์


QuerySet

ก่อนอื่นเรามาทำความเข้าใจให้ตรงกันก่อนนะครับ QuerySet ในทีนี้จะหมายถึงข้อมูลที่ได้จากการ Query มา เช่น

query_set = ModelTest.objects.filter(created_date__range=[start_date, end_date]).order_by('created_date')

Object

object ก็คือข้อมูลแต่ละ record ใน QuerySet


ขั้นตอนการเพิ่ม Object เช้าไปใน QuerySet

  • เพื่อให้ง่ายต่อการเพิ่ม object เข้าไป เราจึงแปลง QuerySet ให้เป็น list ก่อน
query_set = list(query_set)

ต่อมาผมจะต้องการข้อมูลบางส่วนจาก record สุดท้าย มาสร้าง record ใหม่
obj_new = query_set[-1]

แต่ปัญหา คือ เราไม่สามารถสร้างตัวแปรใหม่ตามโค้ดข้างบนได้ เพราะ obj_new จะเก็บแค่ address หรือ id ของ query set ตัวสุดท้ายเท่านั้น

ทำให้ถ้าเราแก้ไขตัวแปร obj_new ค่าสุดท้ายของ query_set ก็จะเปลี่ยนตามไปด้วย ให้ใช้คำสั่ง copy แทน

import copy 

obj_new = copy(query_set[-1])
  • เพิ่ม obj เข้า query_set
query_set.append(obj_new)

แค่นี้เราก็สามารถนำ query_set ไปใช้งานต่อได้แล้ว

หากใครชอบเนื้อหาที่ผมเขียน สามารถร่วมกัน Donate เพื่อเป็นค่ากาแฟได้นะครับ ^^


ใครที่สงสัยจุดไหน หรือพบว่าจุดไหนที่ผมอธิบายผิด สามารถเข้ามาพูดคุยกันได้นะครับ inbox มาที่ Facebook หรือ e-mail: supakit.kr@gmail.com จะยินดีมากเลยครับ



รับพัฒนาโปรแกรมทางด้าน Image Processing, Computer Vision และ Machine Learning สามารถติดต่อ สอบถาม และปรึกษาได้ฟรีครับ

Written by Supakit Kriangkhajorn

© 2019, Built with