اذهب إلى المحتوى

السؤال

نشر

في Django ، ما الفرق بين الإستعلامين التاليين:

Post.objects.values_list('comment_id', flat=True).distinct()

والإستعلام التالي:

Post.objects.values('comment_id').distinct()

هدفي هو الحصول على قائمة بمعرفات التعليقات IDs تحت كل مقالة. لقد قرأت توثيق جانغو Django، وفي الواقع استخدمت كلا الأسلوبين، ويبدو أن النتائج متشابهة بشكل كامل. ما هو الفرق بين إستخدام كلا الأسلوبين السابقين؟

Recommended Posts

  • 1
نشر

التابع values يقوم بإعادة QuerySet تحتوي على قواميس dictionaries، وتكون نتيجته كالتالي:

<QuerySet [{'comment_id': 1}, {'comment_id': 2}]>

بينما التابع values_list يقوم بإعادة كائن QuerySet يحتوي على tuples، وتكون نتيجته كالتالي:

<QuerySet [(1,), (2,)]>

إذا كنت تستخدم التابع values_list لإعادة حقل واحد فيمكنك أن تضع الخاصية flat بقيمة true لإعادة كائن QuerySet يحتوي على كل المعرفات في شكل قيمة واحدة بدلًا من tuple، كالتالي:

<QuerySet [1, 2]>

 

  • 0
نشر

values تقوم باعادة QuerySet  والتى تقوم باعادة مجموعة من القواميس dictionaries.

values_list تقوم باعادة QuerySet والتى تقوم بارجاع tubles 

المثال التالي يوضح الفرق بين الطريقيتين:

>>> list(Article.objects.values_list('id', flat=True)) # flat=True تقوم بتحويل ال tubles الى list  
[1, 2, 3, 4, 5, 6]

>>> list(Article.objects.values('id'))
[{'id':1}, {'id':2}, {'id':3}, {'id':4}, {'id':5}, {'id':6}]

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...