簡體   English   中英

表單未將用戶數據保存到Django數據庫中

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

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