كيف يمكنني تصفية على العنصر الثاني في الصفوف (tuple) من المجموعات؟

StackOverflow https://stackoverflow.com/questions/1745919

  •  20-09-2019
  •  | 
  •  

سؤال

في طراز بي لدي الملعب:

   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])
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top