簡體   English   中英

如何在Django中將表單數據保存到我的模型中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM