[英]Saving form data in the database
您好,我是 Django 的新手,我已經創建了一個可用的房屋過帳表格,但我無法將輸入的數據存儲在數據庫中。 我使用了 if form.is_valid 和 form.cleaned_data 我需要幫助我的代碼:
視圖.py
def public(request):
form = PublicationForm()
if request.method == 'POST':
form = PublicationForm(request.POST, request.FILES)
if form.is_valid():
first_name=form.cleaned_data['first_name']
last_name=form.cleaned_data['last_name']
agency_name=form.cleaned_data['agency_name']
city=form.cleaned_data['city']
categories=form.cleaned_data['categories']
status=form.cleaned_data['status']
phone_number_1=form.cleaned_data['phone_number_1']
phone_number_2=form.cleaned_data['phone_number_2']
description=form.cleaned_data['description']
image_one=form.cleaned_data['image_one']
pub = Publication.objects.create(
first_name=first_name,
last_name=last_name,
agency_name=agency_name,
city=city,
categories=categories,
status=status,
phone_number_1=phone_number_1,
phone_number_2=phone_number_2,
description=description,
image_one=image_one
)
pub.save()
return HttpResponse("Publication réussie")
else:
form = PublicationForm()
return render(request, 'pub/public.html', {'form':form})
這是我使用 django-crispy-form 模塊的模板視圖
public.html
<form method="POST" enctype="multipart/form-data " class="form-block ">
{% csrf_token %} {{ form.non_field_errors }}
<div class="form-row">
<div class="col-md-4 mb-3">
{{ form.first_name.errors }}
<label for="{{ form.first_name.id_for_label }} "></label> {{ form.first_name|as_crispy_field }}
</div>
<div class="col-md-4 mb-3">
{{ form.last_name.errors }}
<label for="{{ form.last_name.id_for_label }} "></label> {{ form.last_name|as_crispy_field }}
</div>
<div class="col-md-4 mb-3">
{{ form.agency_name.errors }}
<label for="{{ form.agency_name.id_for_label }} "></label> {{ form.agency_name|as_crispy_field }}
</div>
<div class="col-md-4 mb-3">
{{ form.city.errors }}
<label for="{{ form.city.id_for_label }} "></label> {{ form.city|as_crispy_field }}
</div>
<div class="col-md-4 mb-3">
{{ form.categories.errors }}
<label for="{{ form.categories.id_for_label }} "></label> {{ form.categories|as_crispy_field }}
</div>
<div class="col-md-4 mb-3">
{{ form.status.errors }}
<label for="{{ form.status.id_for_label }} "></label> {{ form.status|as_crispy_field }}
</div>
<div class="col-md-6 mb-3">
{{ form.phone_number_1.errors }}
<label for="{{ form.phone_number_1.id_for_label }} "></label> {{ form.phone_number_1|as_crispy_field }}
</div>
<div class="col-md-6 mb-3">
{{ form.phone_number_2.errors }}
<label for="{{ form.phone_number_2.id_for_label }} "></label> {{ form.phone_number_2|as_crispy_field }}
</div>
<div class="col-md-12 mb-3">
{{ form.description.errors }}
<label for="{{ form.description.id_for_label }} "></label> {{ form.description|as_crispy_field }}
</div>
<div class="col-md-6 mb-3">
{{ form.image_one.errors }}
<label for="{{ form.image_one.id_for_label }} "></label> {{ form.image_one|as_crispy_field }}
</div>
</div>
<button type="submit " class="btn btn-outline-primary btn-lg btn-block">Publier</button>
</form>
這是一個 ModelForm 在我的表單中我有:
forms.py
class PublicationForm(forms.ModelForm):
class Meta:
model = Publication
fields = ["first_name",
"last_name",
"agency_name",
"city",
"categories",
"status",
"phone_number_1",
"phone_number_2",
"description",
"image_one"
]
widgets = {
'first_name': TextInput(attrs={'class': 'form-control'}),
'last_name': TextInput(attrs={'class': 'form-control'}),
'agency_name': TextInput(attrs={'class': 'form-control'}),
'city': Select(attrs={'class': 'form-control', 'placeholder':'Choisir une ville'} ),
'categories': Select(attrs={'class': 'form-control', 'placeholder':'Choisir une catégorie'}),
'status': Select(attrs={'class': 'form-control', 'placeholder':'Choisir un statut'}),
'phone_number_1': NumberInput(attrs={'class': 'form-control'}),
'phone_number_2': NumberInput(attrs={'class': 'form-control'}),
'description': Textarea(attrs={'class': 'form-control'}),
'image_one': FileInput(attrs={'class': 'form-control'}),
}
您有一個 model 表格,它是一個連接到您的 model 的表格。 您正在做的是取出所有用戶輸入並嘗試用它創建一個 object。 https://docs.djangoproject.com/en/3.1/topics/forms/modelforms/#the-save-method
在我的示例中,您只需保存連接到 model 的表單輸入。
編輯:將消息添加到views.py
重定向需要輸入urls.py
中的路徑名稱
消息鏈接: https://simpleisbetterthancomplex.com/tips/2016/09/06/django-tip-14-messages-framework.html
https://docs.djangoproject.com/en/3.1/ref/contrib/messages/
重定向鏈接: https://docs.djangoproject.com/en/3.1/topics/http/shortcuts/#redirect
#Views.py
from django.contrib import messages
from django.shortcuts import redirect
def public(request):
form = PublicationForm()
if request.method == 'POST':
form = PublicationForm(request.POST, request.FILES)
if form.is_valid():
form.save()
messages.success(request, 'Your password was updated successfully!')
return redirect('index')
else:
form = PublicationForm()
return render(request, 'pub/public.html', {'form':form})
#template
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li class="{{ message.tags }}">{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
我會建議這樣的事情:
def public(request):
form = PublicationForm(request.POST or None, request.FILES or None)
if form.is_valid():
pub = form.save()
return HttpResponse("Publication réussie")
return render(request, 'pub/public.html', {'form':form})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.