Django: أي ما يعادل "حدد[اسم العمود] من[tablename]"




django-models (2)

أردت أن أعرف هل هناك أي شيء يعادل:

select columnname from tablename

مثل يقول جانغو البرنامج التعليمي:

Entry.objects.filter(condition)

يجلب كل الكائنات مع الشرط المحدد. إنه يشبه:

select * from Entry where condition

لكنني أرغب في إنشاء قائمة بعمود واحد فقط (وهو في حالتي مفتاح خارجي). وجدت ذلك:

Entry.objects.values_list('column_name', flat=True).filter(condition)

يفعل الشيء نفسه. ولكن في حالتي ، العمود هو مفتاح خارجي ، ويفقد هذا الاستعلام خاصية مفتاح خارجي. انها مجرد تخزين القيم. لا أستطيع إجراء مكالمات البحث.

https://code.i-harness.com


لتقييد تعيين استعلام على عمود (أعمدة) محدد تستخدم القيم. (العمود)

من المحتمل أيضًا أن تضيف تمييزًا مميزًا حتى النهاية ، بحيث ينتهي بحثك:

Entry.objects.filter(myfilter).values(columname).distinct()

انظر: https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.values

للمزيد من المعلومات

اعتمادا على إجابتك في التعليق ، سوف أعود وتحرير.

تصحيح:

لست متأكدا إذا كان النهج الصحيح واحد رغم ذلك. يمكنك الحصول على جميع الكائنات الخاصة بك في قائمة python عن طريق الحصول على queryset عادي عبر عامل تصفية ثم القيام بما يلي:

myobjectlist = map(lambda x: x.mycolumnname, myqueryset)

المشكلة الوحيدة في هذا النهج هي إذا كان طلب البحث الخاص بك كبيرًا ، فسيكون استخدامك للذاكرة كبيرًا بنفس القدر.

على أي حال ، ما زلت غير متأكد من بعض تفاصيل المشكلة.


لديك نموذج A مع مفتاح خارجي إلى طراز آخر B ، وتريد تحديد B s التي يشار إليها ببعض A هل هذا صحيح؟ إذا كان الأمر كذلك ، فإن طلب البحث هو فقط:

B.objects.filter(a__isnull = False)

إذا كانت لديك شروط على A ، فيمكن أن يكون الاستعلام:

B.objects.filter(a__field1 = value1, a__field2 = value2, ...)

راجع وثائق العلاقات العكسية لـ Django للحصول على توضيح لماذا يعمل هذا ، وخيار ForeignKey.related_name إذا كنت ترغب في تغيير اسم العلاقة إلى الوراء.





django-models