[英]Form is not saving user data into database Django
Python noob在這里嘗試學習一些非常簡單的東西。
我正在嘗試創建一種基本形式,該形式從用戶那里獲取一些個人信息,並將其保存到sqlite3表中,並以用戶名作為主鍵。
我的models.py看起來像這樣:
class userinfo(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, primary_key= True,
on_delete=models.CASCADE)
name = models.CharField(max_length = 200, blank = True)
email = models.EmailField(max_length= 300, default = 'Null')
phone = models.CharField(max_length= 10, default = 'Null')
def __unicode__(self):
return self.user
forms.py:
class NewList(forms.ModelForm):
class Meta:
model = userinfo
exclude = {'user'}
views.py
def newlist(request):
if request.method == 'POST':
form = NewList(request.POST)
if form.is_valid():
Event = form.save(commit = False)
Event.save()
return redirect('/home')
else:
form = NewList()
return render(request, 'home/newlist.html', {'form': form})
的HTML:
{% load static %}
<form action="/home/" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit">
</form>
urls.py也是,但是我不知道這將如何幫助:
urlpatterns = [
url(r'^newlist/$', views.newlist, name='newlist')
]
因此,當我轉到url時,會看到表格。 然后可以填寫表單,但是當我提交表單時,數據不會進入數據庫。
我在這里做錯了什么?
提前致謝!
我認為您只需要保存表單即可(如果有效),也可以將userinfo添加為表單的實例。 您還從表單中排除了用戶,並且需要手動分配它。
def newlist(request):
if request.user.is_authenticated():
user = request.user
if request.method == 'POST':
form = NewList(request.POST, instance=user.userinfo)
if form.is_valid():
form.save(commit=false)
form.user = user
form.save()
return redirect('/home')
else:
form = NewList(instance=user.userinfo) # add this if you want it to automatically fill the form with the old data if there is any.
return render(request, 'home/newlist.html', {'form': form})
其余的看起來應該可以正常工作,除了您需要將帖子URL發送回newlist:
{% load static %}
<form action="/newlist/" method="POST">
{% csrf_token %}
{{ form.as_p }}
</form>
如果是在首次創建模型時分配用戶,則不需要用戶保存,但是由於這是在保存用戶數據,因此您無論如何都要確保他們已登錄:
def newlist(request):
if request.user.is_authenticated():
user = request.user
if request.method == 'POST':
form = NewList(request.POST, instance=user.userinfo)
if form.is_valid():
form.save()
return redirect('/home')
else:
form = NewList(instance=user.userinfo) # add this if you want it to automatically fill the form with the old data if there is any.
return render(request, 'home/newlist.html', {'form': form})
實例是將要保存到其中或從中復制數據的模型。 在: form = NewList(request.POST, instance=user.userinfo)
部分中,它從表單中獲取POST數據,並將其鏈接到user.userinfo的特定模型條目,但是, 它將僅保存到調用form.save()時的數據庫。
user.userinfo只是這樣,您可以獲取要保存的正確表格,因為userinfo是用戶的一個單音模型。 這樣就可以通過user.userinfo獲取它。
form = NewList(instance=user.userinfo)
部分是將當前登錄的用戶的userinfo並在呈現之前復制到表單中的位置,因此舊的userinfo數據將被預先填充到html中的表單中。 那就是如果它有正確的userinfo模型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.