Django จะสร้างฟิลด์ id เป็นคีย์หลักโดยอัตโนมัติ
ตอนนี้ฉันต้องการรับวัตถุด้วยรหัสนี้
object = Class.objects.filter()
จะเขียนฟิลเตอร์นี้อย่างไร?
Django จะสร้างฟิลด์ id เป็นคีย์หลักโดยอัตโนมัติ
ตอนนี้ฉันต้องการรับวัตถุด้วยรหัสนี้
object = Class.objects.filter()
จะเขียนฟิลเตอร์นี้อย่างไร?
คำตอบ:
หากคุณต้องการรับวัตถุการใช้งานget()
นั้นตรงไปตรงมามากกว่า:
obj = Class.objects.get(pk=this_object_id)
id
ในฟังก์ชันในตัวที่ส่งคืนข้อมูลประจำตัวของวัตถุ ในกรณีส่วนใหญ่การอ้างถึงสิ่งต่างๆโดยid
จะทำในสิ่งที่ถูกต้องเช่นClass.objects.get(id=this_object_id)
ทำงาน แต่นั่นเป็นสิ่งที่ต้องพิจารณาฉันเดา
ฉันมาที่นี่ด้วยปัญหาเดียวกัน แต่ด้วยเหตุผลอื่น:
Class.objects.get(id=1)
รหัสนี้เพิ่มข้อยกเว้น ImportError สิ่งที่ทำให้ฉันสับสนคือโค้ดด้านล่างทำงานได้ดีและส่งคืนผลลัพธ์ตามที่คาดไว้:
Class.objects.all()
หางของการย้อนกลับสำหรับget()
วิธีการ:
File "django/db/models/loading.py", line 197, in get_models
self._populate()
File "django/db/models/loading.py", line 72, in _populate
self.load_app(app_name, True)
File "django/db/models/loading.py", line 94, in load_app
app_module = import_module(app_name)
File "django/utils/importlib.py", line 35, in import_module
__import__(name)
ImportError: No module named myapp
เมื่ออ่านโค้ดภายใน Django loading.py
ฉันได้ข้อสรุปว่าฉันsettings.py
มีเส้นทางที่ไม่ดีไปยังแอปของฉันซึ่งมีClass
คำจำกัดความของโมเดลของฉัน สิ่งที่ฉันต้องทำคือแก้ไขเส้นทางไปยังแอพและget()
วิธีการดำเนินการได้ดี
นี่คือsettings.py
เส้นทางที่ถูกต้องของฉัน:
INSTALLED_APPS = (
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
# ...
'mywebproject.myapp',
)
ความสับสนทั้งหมดเกิดจากฉันใช้ ORM ของ Django เป็นแบบสแตนด์อโลนดังนั้นเนมสเปซจึงต้องสะท้อนสิ่งนั้น
คุณยังสามารถทำ:
obj = ClassModel.get_by_id(object_id)
ใช้งานได้ แต่อาจไม่แน่ใจว่ารองรับ Django 2 หรือไม่
คุณสามารถใช้ได้:
objects_all=Class.objects.filter(filter_condition="")
สิ่งนี้จะส่งคืนชุดแบบสอบถามแม้ว่าจะได้รับวัตถุหนึ่งชิ้น หากคุณต้องการใช้วัตถุชิ้นเดียว:
obj=Class.objects.get(conditon="")
คุณยังสามารถใช้ทางลัดget_object_or_404 django จะทำให้เกิดข้อผิดพลาด 404 หากไม่พบวัตถุ
pk
เป็นวิธีที่แนะนำในการอ้างถึงคีย์หลักสำหรับรุ่นใด ๆid
ข้อมูลจะถูกสร้างขึ้นเฉพาะในกรณีที่ผู้เขียนรูปแบบไม่เฉพาะกำหนดคีย์หลัก หากผู้เขียนไม่ระบุเขตข้อมูลคีย์หลักที่ยังไม่ได้ตั้งชื่อid
แล้วจะไม่เป็นid
ฟิลด์