在我的Django應用程序中,我有一個帶有電子郵件和文本區域的表單,需要進入數據庫,但是很難做到這一點。目前,我有我的代碼2個不同的解決方案:將表單保存到數據庫(Django Python)
回答
如果我理解正確的話,那麼你應該先建立一個模型(與電子郵件字段和文本字段(CharField),(然後自動在運行django migrate時創建數據庫中的表),那麼您應該從創建的Model中創建一個ModelForm,這是最簡單,最快速的基本解決方案,它會自動將表單保存在數據庫中(使用.save()方法)然後,您不會在保存過程中混淆表格和模型字段。
有關ModelForms的參考信息,請參閱: https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/
因此,最好直接從模型創建表單。
在你具體的例子(你不匹配的字段保存,這就是爲什麼它不工作):
,我看到你在views.py文件中創建一個「get_question」功能。在該功能,你應該改變你的代碼的節省部分,包括像這樣:
# from .models import Contact
saving_all = Contact.objects.create(contact_email = form_email, contact_question = form_question)
的代碼將在您的聯繫表保存在數據庫中的表這部分數據。
它與您在view.py中的原始方法(您不匹配字段的位置)中的代碼保存的代碼相同。它應該是這樣的,如果糾正:
# from .models import Contact
contact = Contact(contact_email=form_email, contact_question=form_question)
contact.save()
更清楚:下面這段代碼是工作在views.py並從形式到聯繫人模型(表)數據庫保存數據(使用自己的APP_NAME如果需要的話,當然代碼):
from django.shortcuts import render
from . import forms
from . import models
from django.http import HttpResponse
def get_question(request):
form = forms.QuestionForm()
if request.method == 'POST':
form = forms.QuestionForm(request.POST)
if form.is_valid():
form_email = form.cleaned_data['your_email']
form_question = form.cleaned_data['your_question']
saving_all = models.Contact.objects.create(contact_email=form_email, contact_question=form_question)
return HttpResponse('Success')
else:
form = forms.QuestionForm()
return render(request, 'basic_app/contact.html', {'form':form})
而且你的模型看起來像這樣在models.py:
from django.db import models
# Create your models here.
class Contact(models.Model):
contact_email = models.EmailField(max_length=80)
contact_question = models.CharField(max_length=600)
和你在forms.py形式如下:
from django import forms
class QuestionForm(forms.Form):
your_email = forms.EmailField()
your_question = forms.CharField(widget = forms.Textarea)
仍然不能正常工作,我的'def contact(request):'應該如何在views.py中顯示? get_question函數如何被調用? – Lode
好的,讓我從頭開始寫。如果你現在進行下面的步驟來練習,也許會更好。
現在,正確的方法來完成上述任務(我嘗試清除這個問題多一點,因爲我知道許多其他人會閱讀這個問題,他們也可以從中學習,而且理解它很重要爲您的將來的任務
如果你想創建一個表單,並且你知道你想要將提交的數據從該表單保存到數據庫,那麼當然你應該開始創建一個模型的整個任務,因此一個在數據庫中的表格
因此,首先你要創建一個模型(在這種情況下你將調用ie。「Questions」,因爲你想調用你的表單即QuestionForm,所以如果你的模型表格也將與他們的名字相關)。
所以你的模型將會在你的模型中。PY文件:
from django.db import models
# Create your models here.
class Questions(models.Model):
contact_email = models.EmailField(max_length=60)
question = models.CharField(max_length=600)
然後你會在你的forms.py文件創建這個的ModelForm方式如下:
from django import forms
from django.forms import ModelForm, Textarea
from . import models
class QuestionForm(ModelForm):
class Meta:
model = models.Questions
fields = ['contact_email', 'question']
widgets = {
'question': Textarea(attrs={'cols': 40, 'rows': 20}),
}
然後你在views.py文件中創建您的視圖功能:
from django.shortcuts import render, redirect
from . import forms
from . import models
from django.http import HttpResponse
def get_question(request):
form = forms.QuestionForm()
if request.method == 'POST':
form = forms.QuestionForm(request.POST)
if form.is_valid():
form.save()
return redirect(‘success.html’) # or you redirect anywhere you want to
else:
form = forms.QuestionForm()
return render(request, 'contact.html', {'form':form})
在這一點上,你會在你的urls.py中創建你的urlpattern來調用get_question視圖函數。它看起來像下面這樣:
from django.conf.urls import url
from basic_app import views
# app_name = 'basic_app' # Important for referencing urls in HTML pages(use your own app_name here). But for this example task this is not important.
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^questions/', views.get_question, name="questions_page"),
]
我希望我沒有更多地混淆你。如果你執行上述步驟,它應該適合你。您可以按照上述步驟創建任意數量的表單,並將其輕鬆保存到數據庫中。
您必須具備的其他操作才能運行上述操作,您的'contact.html'頁面已經存在,而且您已經創建了該頁面。
(不要忘了運行:蟒蛇manage.py遷移)
所以,我希望你看,在上面的例子中你沒有錯配域和域名,你就不會感到困惑什麼保存在哪裏。由於模型和表單一起工作並且使用相同的字段名稱一起創建。
- 1. Django FormPreview:將表單數據保存到數據庫
- 2. 使用Django表單將數據保存到數據庫
- 3. Django表單數據不會保存到數據庫(sqlite)
- 4. Django的:保存表單數據庫
- 5. 無法將表單數據保存在數據庫中 - Django
- 6. 保存到django數據庫
- 7. 保存HTML表單數據到數據庫 - Django的
- 8. Django表單請求不保存數據到數據庫
- 9. 將表單數據保存到數據庫表中YII2
- 10. 將表單數據保存到數據庫併發送給API; Django
- 11. 保存數據到Django數據庫
- 12. Django無法在數據庫中保存表單數據
- 13. 如何將表單數據保存到數據庫中
- 14. 將數據從多頁表單保存到數據庫Wordpress
- 15. Django表單提交,但不會保存到數據庫
- 16. django表單並不總是將更改保存到數據庫中
- 17. 將Struts2表格保存到數據庫
- 18. 將HTML表保存到數據庫
- 19. 將DataTable保存到數據庫表中
- 20. Django - 從數據庫中保存表單的數據
- 21. Django:將數據從API保存到數據庫(postgres)
- 22. Django將數據保存到數據庫中
- 23. django jsonfield保存到數據庫
- 24. 自動保存到數據庫的Django
- 25. 在Django保存表單數據
- 26. Django覆蓋表單數據保存
- 27. 我的Django表單數據不會保存到我的數據庫
- 28. Total.js將數據保存到數據庫
- 29. 將數據集保存到數據庫
- 30. 將數據集保存到數據庫
請將您的代碼作爲文本發佈,而不是圖片。它使人們更容易幫助你。 – Jonathan
簡化圖片 – Fabien