Amer Abdallah نشر 20 سبتمبر 2021 أرسل تقرير نشر 20 سبتمبر 2021 أحاول إنشاء قالب template لعرض قيم حقول نموذج المحدد ، إلى جانب أسماء الحقول. على سبيل المثال، لنفترض أن لدي النموذج التالي: class User(Model): name = CharField(max_length=150) email = EmailField(max_length=100, verbose_name="E-mail") أرغب في إخراج البيانات السابقة في قالب معين لتكون النتيجة كالتالي: name My Full Name E-mail mail@example.com لذلك أحاول أن أقوم بعمل القالب بالشكل التالي: <table> {% for field in fields %} <tr> <td>{{ field.name }}</td> <td>{{ field.value }}</td> </tr> {% endfor %} </table> بالطبع الكود السابق لن يعمل، ولكن هذا ما أحاول أن أقوم به، هل هناك طريقة يوفرها جانغو Django للقيام بذلك؟ 4 اقتباس
1 سامح أشرف نشر 20 سبتمبر 2021 أرسل تقرير نشر 20 سبتمبر 2021 يوفر جانغو Django طريقة للحصول على أسماء الحقول وقيمها أيضًا من خلال التابع get_fields والذي يقوم بإرجاع tuple من أسماء الحقول، ويمكنك إستخدامه كالتالي: from django.contrib.auth.models import User fields = User._meta.get_fields() for field in fields: print(field.name) وإن كنت تريد المرور على كل الكائنات في نموذج معين فيمكنك أن تستخدم serializers، على النحو التالي: from django.core import serializers users = serializers.serialize("python", User.objects.all()) ثم في القالب: {% for user in users %} {% for field, value in user.fields.items %} {{ field }}: {{ value }} {% endfor %} {% endfor %} وإن أردت عرض حقول معينة، فيمكنك إضافة الخاصية fields، كالتالي: from django.core import serializers users = serializers.serialize("python", User.objects.all(), fields=('name','email')) 2 اقتباس
0 Ahmed Sharshar نشر 20 سبتمبر 2021 أرسل تقرير نشر 20 سبتمبر 2021 (معدل) يمكنك استخدام الدالة model._meta.get_all_field_names() #استخدام الكود التالي عوضا اذا كنت تستخدم نسخه 1.9 model._meta.get_fields() لعرض اسماء الحقول في النموذج. كذلك يمكنك استخدام: model._meta.get_field() لتستطيع التعامل مع اسماء verbose. ويمكنك استخدام: etattr(model_instance, 'field_name') للتعامل مع قيم الحقول تم التعديل في 20 سبتمبر 2021 بواسطة Ahmed Sharshar 1 اقتباس
0 Ali Haidar Ahmad نشر 20 سبتمبر 2021 أرسل تقرير نشر 20 سبتمبر 2021 إضافة إلى الحلول التي ذكرها سامح يمكنك استخدام model_to_dict للحصول على أسماء الحقول وقيمها بالشكل التالي: from django.forms.models import model_to_dict def show(request, object_id): object = FooForm(data=model_to_dict(Foo.objects.get(pk=object_id))) return render_to_response('foo/foo_detail.html', {'object': object}) ثم في القالب: {% for field in object %} <li><b>{{ field.label }}:</b> {{ field.data }}</li> {% endfor %} 1 اقتباس
0 محمد أبو عواد نشر 20 سبتمبر 2021 أرسل تقرير نشر 20 سبتمبر 2021 إليك طريقة أخرى باستخدام طريقة النموذج (model method). يمكنك باستخدام هذه الطريقة أن تتخطى الحقول الفارغة ويتيح لك استبعاد حقول محددة. def get_all_fields(self): """Returns a list of all field names on the instance.""" fields = [] for f in self._meta.fields: fname = f.name get_choice = 'get_'+fname+'_display' if hasattr(self, get_choice): value = getattr(self, get_choice)() else: try: value = getattr(self, fname) except AttributeError: value = None # اعرض فقط الحقول ذات القيم وتخطي بعض الحقول if f.editable and value and f.name not in ('id', 'status', 'workshop', 'user', 'complete') : fields.append( { 'label':f.verbose_name, 'name':f.name, 'value':value, } ) return fields ثم في القالب الخاص بك: {% for f in app.get_all_fields %} <dt>{{f.label|capfirst}}</dt> <dd> {{f.value|escape|urlize|linebreaks}} </dd> {% endfor %} 1 اقتباس
السؤال
Amer Abdallah
أحاول إنشاء قالب template لعرض قيم حقول نموذج المحدد ، إلى جانب أسماء الحقول. على سبيل المثال، لنفترض أن لدي النموذج التالي:
أرغب في إخراج البيانات السابقة في قالب معين لتكون النتيجة كالتالي:
name My Full Name E-mail mail@example.com
لذلك أحاول أن أقوم بعمل القالب بالشكل التالي:
بالطبع الكود السابق لن يعمل، ولكن هذا ما أحاول أن أقوم به، هل هناك طريقة يوفرها جانغو Django للقيام بذلك؟
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.