جانغو - تكرار حقل نموذج n مرة في شكل واحد
-
05-07-2019 - |
سؤال
ولقد شكل جانغو مع العديد من الحقول في واحدة من الذي يحتاج الى ن مرات (حيث لا يعرف ن في وقت التصميم) كيف لي أن التوجه نحو الترميز هذا (إذا كان من الممكن على الإطلاق) المتكررة؟
ومنها مثلا. بدلا من: -
Class PaymentsForm(forms.form):
invoice = forms.CharField(widget=ValueHiddenInput())
total = forms.CharField(widget=ValueHiddenInput())
item_name_1 = forms.CharField(widget=ValueHiddenInput())
item_name_2 = forms.CharField(widget=ValueHiddenInput())
.
.
.
item_name_n = forms.CharField(widget=ValueHiddenInput())
وأحتاج شيئا مثل: -
Class PaymentsForm(forms.form):
invoice = forms.CharField(widget=ValueHiddenInput())
total = forms.CharField(widget=ValueHiddenInput())
item_name[n] = forms.CharField(widget=ValueHiddenInput())
شكرا،
ريتشارد.
المحلول
ويمكنك إنشاء حقول المتكررة في طريقة __init__
النموذج الخاص بك:
class PaymentsForm(forms.Form):
invoice = forms.CharField(widget=forms.HiddenInput())
total = forms.CharField(widget=forms.HiddenInput())
def __init__(self, *args, **kwargs):
super(PaymentsForm, self).__init__(*args, **kwargs)
for i in xrange(10):
self.fields['item_name_%d' % i] = forms.CharField(widget=forms.HiddenInput())
والمزيد من المعلومات حول نماذج ديناميكية ويمكن الاطلاع على سبيل المثال هنا
وتحرير: للرد على السؤال في تعليقك: مجرد اعطاء عدد من حالات التكرار كحجة لطريقة __init__
، شيء من هذا القبيل:
def __init__(self, repetitions, *args, **kwargs):
super(PaymentsForm, self).__init__(*args, **kwargs)
for i in xrange(repetitions):
self.fields['item_name_%d' % i] = forms.CharField(widget=forms.HiddenInput())
وبعد ذلك من وجهة نظرك (أو أينما كنت إنشاء النموذج):
payments_form = PaymentsForm(10)
نصائح أخرى
formsets .
لا تنتمي إلى StackOverflow