سؤال

ولقد شكل جانغو مع العديد من الحقول في واحدة من الذي يحتاج الى ن مرات (حيث لا يعرف ن في وقت التصميم) كيف لي أن التوجه نحو الترميز هذا (إذا كان من الممكن على الإطلاق) المتكررة؟

ومنها مثلا. بدلا من: -

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)

نصائح أخرى

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top