[英]How to save form data to my model in django
我正在創建一個需要用戶名和電子郵件的新聞通訊應用程序。 但是每次我輸入表格數據。 沒有變化反映在數據庫中
models.py
class NewUsers(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField()
date_added = models.DateField(auto_now_add= True)
class Meta:
verbose_name = "NewUser"
verbose_name_plural = "NewUsers"
def __str__(seld):
return self.email
views.py
def newsletter_subscribe(request):
if request.method == 'POST' :
form = NewUserForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name'] #variable to store cleaned data
email = form.cleaned_data['email']
instance = NewUsers(name= name, email = email)
instance.save()
if NewUsers.objects.filter(email = instance.email).exists():
print("Your email is already added to our database")
else:
instance.save()
print("Thank you for subscribing")
else:
form = NewUserForm()#display empty form
context = {'form':form}
template = "index.html"
return render(request ,template ,context )
這是我的模板代碼
模板
<form method="post" action="{%url 'subscribe'%}">
{% csrf_token %}
<label for="id_email_field">Name:</label> <input type="text"
name=""
required="" id="">
<label for="id_email_field">E-mail:</label> <input type="email"
name="email_field"
required="" id="id_email_field">
<button id="id_submit" name="submit" value="Subscribe"
type="submit">Subscribe
</button>
</form>
我注意到一些事情:首先,視圖必須返回HttpResponse對象。 例如,我建議在這里閱讀: https : //docs.djangoproject.com/en/2.1/topics/http/views/和在這里: https : //docs.djangoproject.com/en/2.1/topics/forms/所以,因為顯然您沒有指出這個事實,所以我認為request.method從未等於“ POST”。 也許您可以嘗試找出是否是這種情況? 因此:請您也提供您的模板代碼。
接下來,您在if form.is_valid()中的代碼非常人為設計。 在這里最自然的事情就是調用form.save()。 這將從清理的表單數據中在數據庫中創建一個實例。 萬一您需要進行一些調整,可以像這樣擴展:
instance = form.save(commit=False)
# add some adjustments (instance.foo = bar)
instance.save()
最后,如前所述,您需要返回一個HttpResponse對象,該對象通常通過
return redirect(url_name, ..)
編輯:因為您現在已經添加了模板代碼:嘗試首先讓django為您呈現字段: https : //docs.djangoproject.com/en/2.1/topics/forms/#rendering-fields-manually ,然后看看模板的源代碼。 我認為您的名稱輸入字段缺少名稱標簽,並且您的電子郵件輸入字段應具有name =“ email”。 您甚至可以讓django為您呈現整個表單(請再次參閱文檔...)。在輸入字段中沒有(正確的)名稱標簽的情況下-無法發送或正確分配用戶輸入的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.