繁体   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