django form.is_valid возвращает false после динамического добавления полей в форму - PullRequest
0 голосов
/ 26 мая 2020

У меня есть такая форма,

class UniqueUrlForm(forms.ModelForm):
    cc_number = cc_form.CardNumberField(label='Card Number')
    cc_expiry = cc_form.CardExpiryField(label='Expiration Date')
    cc_code = cc_form.SecurityCodeField(label='CVV/CVC')

    class Meta:
        model = Transactions
        fields = ['customer_name', 'customer_phone', 'customer_email', 'total_amount', 'cc_number', 'cc_expiry',
                  'cc_code']

    def __init__(self, *args, **kwargs):
        super().__init__()

        store_id = kwargs.get("store_id", "1")
        payment_page = get_object_or_404(
            PaymentPageDisplayDetails.objects.filter(store_id=store_id).values("payment_fields_visible"))

        with urllib.request.urlopen(payment_page['payment_fields_visible']) as url:
            display_fields = json.loads(url.read().decode())

        for field_name in display_fields:
            self.fields[field_name] = forms.CharField(required=False)

и такое представление,

def getpaymentpage(request, store_identifier):
    uniqueurl_form = UniqueUrlForm(request.POST or None, request.FILES or None, {"store_id": 1})

    if uniqueurl_form.is_valid():

            trx_details = {
                "amount": uniqueurl_form.cleaned_data['amount'],
                "customer_email": uniqueurl_form.cleaned_data['customer_email'],
                "customer_phone": uniqueurl_form.cleaned_data['customer_phone'],
                "cc_number": uniqueurl_form.cleaned_data['cc_number'],
                "cc_name": uniqueurl_form.cleaned_data['customer_name'],
                "cc_month": uniqueurl_form.cleaned_data['cc_month'],
                "cc_year": uniqueurl_form.cleaned_data['cc_year'],
                "cvv": uniqueurl_form.cleaned_data['cvv'],
            }

        return HttpResponse(trx_details)
    context = {
        'form': {
            uniqueurl_form,
        },
        "page": store_display,
    }
    return render(request, 'unique_url.html', context)

Я пробовал print(uniqueurl_form.errors), он всегда возвращает пустой и уникальныйurl_form.is_valid () как false.

Это потому, что я добавляю в форму поля Dynami c. Я упомянул следующее:

динамическое добавление поля в форму

Что я здесь делаю не так? Спасибо за ваши предложения.

1 Ответ

0 голосов
/ 28 мая 2020

как ни странно, он начал работать, когда я внес следующие изменения,

class UniqueUrlForm(forms.ModelForm):
    cc_number = cc_form.CardNumberField(label='Card Number')
    cc_expiry = cc_form.CardExpiryField(label='Expiration Date')
    cc_code = cc_form.SecurityCodeField(label='CVV/CVC')

    class Meta:
        model = Transactions
        fields = ['customer_name', 'customer_phone', 'customer_email', 'total_amount', 'cc_number', 'cc_expiry',
                  'cc_code']

    def __init__(self, *args, **kwargs):
        store_id = kwargs.get("store_id", "1")

        super(UniqueUrlForm, self).__init__(*args, **kwargs)

        payment_page = get_object_or_404(
            PaymentPageDisplayDetails.objects.filter(store_id=store_id).values("payment_fields_visible"))

        with urllib.request.urlopen(payment_page['payment_fields_visible']) as url:
            display_fields = json.loads(url.read().decode())

        for field_name in display_fields:
            self.fields[field_name] = forms.CharField()

я предполагаю, потому что я не указал имя класса в моем .super() событии, хотя он добавлял поля, он не был уверен, какие проверки поставить на эти поля.

...