Python 3.x Django Python POST方法未写入数据库

Python 3.x Django Python POST方法未写入数据库,python-3.x,django,post,django-models,django-forms,Python 3.x,Django,Post,Django Models,Django Forms,我现在有一个问题,我的POST方法没有写入数据库,也没有显示在管理网站 views.py文件在到达“if form.is_valid()”之前一直有效,但仅此而已。我做错了什么? 请帮忙,我花了很多时间试图寻找答案,但没有结果 代码如下 url.py path('weekly/', user_views.weekly, name='weekly'), views.py def weekly(request): if request.method == 'POST': f

我现在有一个问题,我的POST方法没有写入数据库,也没有显示在管理网站

views.py文件在到达“if form.is_valid()”之前一直有效,但仅此而已。我做错了什么? 请帮忙,我花了很多时间试图寻找答案,但没有结果

代码如下

url.py

path('weekly/', user_views.weekly, name='weekly'),
views.py

def weekly(request):
    if request.method == 'POST':
        form = SubscriptionForm(request.POST)
        print('I got this far 3!')
        if form.is_valid():
            form.save()
            messages.success(request, 'Thank you for your payment!')
            return redirect('classes')
        else:
            return render(request, 'clubex/weekly.html', {'title': '1 Week Free'})
    else:
        return render(request, 'clubex/weekly.html',  {'title': '1 Week Free'})
models.py(这些名称是否必须与HTML文档中的“id”匹配?)

py(这些名称是否必须与HTML文档中的“id”匹配?)

html(注意到验证js文件的链接)


该表单无效。使用sub_类型和状态,您将传递一个
choicefield
,模型需要一个
charfield

您的表格必须是:

class SubscriptionForm(forms.ModelForm):
    firstName = forms.CharField(
        required=True,
        label="First Name",
        widget=forms.TextInput( attrs = {
                'type':"text",
                'placeholder':"First name",
                'class':'form-control', # html input class
        })    
    )

    sub_type = forms.ChoiceField(
        required=True,
        label="Subscription Type",
        choices= (
            ('Option 1', 'Choose'),
            ('Option 2', 'Weekly $ Free'),
            ...
        ),
        widget=forms.Select( attrs = {
            'class':'your-css-class'
        })
    )

    ...
将表单传递给html

def weekly_get(request):
    form = SubscriptionForm()
    return render('weekly.html',{'form':form })
<form method="post" action="/weekly/" class="needs-validation">
{% csrf_token %}
    
{% for field in form %}
    <div class="row">
        <div class="col-md-6 mb-3">
            {{field.label_tag}}
            {{field}}
        </div>
    </div>
{% endfor %}

</form>
然后,你的html

def weekly_get(request):
    form = SubscriptionForm()
    return render('weekly.html',{'form':form })
<form method="post" action="/weekly/" class="needs-validation">
{% csrf_token %}
    
{% for field in form %}
    <div class="row">
        <div class="col-md-6 mb-3">
            {{field.label_tag}}
            {{field}}
        </div>
    </div>
{% endfor %}

</form>

{%csrf_令牌%}
{%形式的字段为%}
{{field.label_tag}
{{field}}
{%endfor%}

表单无效。使用sub_类型和状态,您将传递一个
choicefield
,模型需要一个
charfield

您的表格必须是:

class SubscriptionForm(forms.ModelForm):
    firstName = forms.CharField(
        required=True,
        label="First Name",
        widget=forms.TextInput( attrs = {
                'type':"text",
                'placeholder':"First name",
                'class':'form-control', # html input class
        })    
    )

    sub_type = forms.ChoiceField(
        required=True,
        label="Subscription Type",
        choices= (
            ('Option 1', 'Choose'),
            ('Option 2', 'Weekly $ Free'),
            ...
        ),
        widget=forms.Select( attrs = {
            'class':'your-css-class'
        })
    )

    ...
将表单传递给html

def weekly_get(request):
    form = SubscriptionForm()
    return render('weekly.html',{'form':form })
<form method="post" action="/weekly/" class="needs-validation">
{% csrf_token %}
    
{% for field in form %}
    <div class="row">
        <div class="col-md-6 mb-3">
            {{field.label_tag}}
            {{field}}
        </div>
    </div>
{% endfor %}

</form>
然后,你的html

def weekly_get(request):
    form = SubscriptionForm()
    return render('weekly.html',{'form':form })
<form method="post" action="/weekly/" class="needs-validation">
{% csrf_token %}
    
{% for field in form %}
    <div class="row">
        <div class="col-md-6 mb-3">
            {{field.label_tag}}
            {{field}}
        </div>
    </div>
{% endfor %}

</form>

{%csrf_令牌%}
{%形式的字段为%}
{{field.label_tag}
{{field}}
{%endfor%}

widget=forms.TextInput()中应该放什么?ChoiceField的widget属性是
widget=forms.Select()
。请看我的编辑是的,我看到了,谢谢。我有工作的形式,但它仍然没有保存到模型在管理网站。这是现在的工作。我添加了“if form.is_valid”条件,效果很好。不过,还要感谢你一件事,在管理网站上,我如何显示Choicefield。目前,如果我选择“每周$Free”,将显示“选项2”。我也解决了上述问题。谢谢你的帮助。非常感谢。我应该在widget=forms.TextInput()中输入什么?ChoiceField的widget属性是
widget=forms.Select()
。请看我的编辑是的,我看到了,谢谢。我有工作的形式,但它仍然没有保存到模型在管理网站。这是现在的工作。我添加了“if form.is_valid”条件,效果很好。不过,还要感谢你一件事,在管理网站上,我如何显示Choicefield。目前,如果我选择“每周$Free”,将显示“选项2”。我也解决了上述问题。谢谢你的帮助。非常感谢。