كيف يمكنني تصفية على العنصر الثاني في الصفوف (tuple) من المجموعات؟
سؤال
في طراز بي لدي الملعب:
country = models.CharField(_('Country'), max_length=2, choices=COUNTRIES)
وأين البلدان هي الصفوف (tuple) من المجموعات مثل هذا:
COUNTRIES = (
('AF', _('Afghanistan')),
... وهلم جرا
والآن أريد لتصفية مثيل هذا النموذج، من خلال اسم البلد.
وهذا ما يلي:
i = MyModel.objects.filter(country__iexact=query)
ويتيح لي فقط تصفية حسب رمز البلد.
وكيف يمكنني تصفية حسب اسم البلد؟
المحلول
لا يمكن تصفية مباشرة من قبل اسم البلد (يتم استخدام choices
فقط في واجهة المستخدم، وليس في قاعدة البيانات).
إذا كنت تحصل على الاسم الكامل كمدخل، بحث التعليمات البرمجية في COUNTRIES
الصفوف (tuple) من بين الصفوف. على سبيل المثال:
# ... initialize a lookup dictionary
country_to_id_dict = dict((t[1], t[0]) for t in COUNTRIES)
# ... use the dictionary in the query
i = MyModel.objects.filter(country__exact=country_to_id_dict[query])
لا تنتمي إلى StackOverflow