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

السؤال

نشر

لدي نموذج كالتالي:

class User(models.Model):
    name = models.CharField(max_length=200)
    bio  = models.CharField(max_length=20000, blank=True)
    
    GENDER_CHOICES = (
        ('M', 'Male'),
        ('F', 'Female'),
    )
    gender = models.CharField(max_length=20, choices=GENDER_CHOICES)

وأستخدم النموذج السابق في ملف العرض view التالي:

def profile(request):
    users = User.objects.filter(bio='')
    return object_list(request, template_name='polls/profiles.html', queryset=users, paginate_by=5)

لكن المشكلة هي عندما أحاول أن أقوم بطباعة الخاصية gender أحصل على M أو F بدلًا من Male أو Female، كيف أقوم بطباعة اسم الخاصية بالكامل؟

Recommended Posts

  • 1
نشر

يوفر لك Django إمكانية إستخدام أي خاصية من خلال كتابة التالي:

<النموذج>.get_<اسم الخاصية>_display

وبالتالي لطباعة القيمة الكاملة للخاصية gender في النموذج User ستكون كالتالي:

{{ user.gender}}	# M

{{ user.get_gender_display }}	# Male

وفي حالة إستخدام Jinja2 كمحرك القوالب، فيجب أن يتم إضافة قوسين في النهاية ، كالتالي:

{{ user.get_gender_display() }}

 

  • 0
نشر

لكل حقل يحتوي على مجموعة اختيارات ، سيكون للكائن دالة اسمها get_FOO_display () ، حيث FOO هو اسم الحقل. تقوم هذه الطريقة بإرجاع قيمة الحقل والتي يمكننا قراءتها, في ملف العرض

user = User.objects.filter(to_be_listed=True)
context['gender'] = User.get_gender_display()

في التمبليت

{{ user.get_gender_display }}

 

  • 0
نشر (معدل)

مقتبس من التوثيق "لكل حقل يحتوي على مجموعة اختيارات، سيكون للكائن طريقة get_FOO_display () ، حيث FOO هو اسم الحقل. تقوم هذه الطريقة بإرجاع قيمة الحقل بحيث يمكننا قراءتها." .
لذا يمكنك إجراء التعديل التالي:

class User(models.Model):
    name = models.CharField(max_length=200)
    bio  = models.CharField(max_length=20000, blank=True)
    
    GENDER_CHOICES = (
        ('M', 'Male'),
        ('F', 'Female'),
    )
    gender = models.CharField(max_length=20, choices=GENDER_CHOICES)
    def __str__(self):
   		 return self.get_gender_display()

أو:

#views ضمن ال
user = user.objects.filter(to_be_listed=True)
context['gender'] = user.get_gender_display()
#template ضمن ال
{{ user.get_gender_display }}

 

تم التعديل في بواسطة Ali Haidar Ahmad

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...