Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从django don';t保存在DB中_Python_Django - Fatal编程技术网

Python 从django don';t保存在DB中

Python 从django don';t保存在DB中,python,django,Python,Django,我想在数据库中保存用户名,但它不起作用。下面是代码。我已经创建了一个名为User的DB,我正试图保存从我创建的html中获取输入的用户。我的数据库用户只包含用户名字段。我使用UserCrationForm作为默认值,我的数据库在phpmyadmin中显示为用户。我认为这不是问题所在。当我试图从shell保存时,它会工作,使用savemodelform views.py def register_user(request): if request.method == 'POST':

我想在数据库中保存用户名,但它不起作用。下面是代码。我已经创建了一个名为User的DB,我正试图保存从我创建的html中获取输入的用户。我的数据库用户只包含用户名字段。我使用UserCrationForm作为默认值,我的数据库在phpmyadmin中显示为用户。我认为这不是问题所在。当我试图从shell保存时,它会工作,使用savemodelform

views.py

def register_user(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            q = form.save(commit=False)
            q.username = request.username
            q.save()
            return HttpResponseRedirect('/polls/login')
    else:
        messages.error(request, "Error")
    args = {}
    args.update(csrf(request))
    args['form'] = UserCreationForm()
    return render_to_response('polls/register.html', args, context_instance= RequestContext(request))


register.html

{% block content %}
   <h2> Register</h2>
        <form action="/polls/login/" method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="Register">
        </form>
{% endblock %}
views.py
def寄存器用户(请求):
如果request.method==“POST”:
form=UserCreationForm(request.POST)
如果form.is_有效():
q=表单.save(提交=False)
q、 username=request.username
q、 保存()
返回HttpResponseRedirect('/polls/login')
其他:
messages.error(请求“error”)
args={}
参数更新(csrf(请求))
args['form']=UserCreationForm()
返回render_to_响应('polls/register.html',args,context_实例=RequestContext(request))
register.html
{%block content%}
登记
{%csrf_令牌%}
{{form.as_p}}
{%endblock%}
我看不出问题出在哪里。
有人帮忙吗?

问题在这里:
q.username=request.username
。应该是:

def register_user(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            q = User() #import your own User model here. 
            q.username = request.user.username
            q.save()
            return HttpResponseRedirect('/polls/login')
PS:这将只获取登录用户的用户名

编辑: (来自评论) 正如您所看到的,
UserCreationForm
是一个模型表单,其中在元类中,模型是auth.User模型(check)。因此,您的数据将保存在auth.User中。因此,像这样覆盖
UserCreationForm
(如果要使用
UserCreationForm
):


对于这个解决方案,您必须记住,您需要从
auth.User
model中为
PollUser
model创建子类。如果您想使用自己的
PollUser
模型(而不是从
auth.User
模型中进行子类化),那么我建议您为
PollUser
创建一个新的模型表单,而不要使用
UserCreationForm

不起作用?你有没有收到任何错误消息?如果没有任何结果,请尝试添加一些日志消息以帮助调试。并添加表单及其保存方法。无错误消息。我不知道它是否有连接,但我使用了另外两种型号,这两种型号都有foreignkey,有问题吗?试着打印
form.errors
,看看在发布表单时是否有一些无效字段。你也应该通过form.py代码。你仍然没有得到任何用户名或只是空白?我认为如果您使用django的默认身份验证模型(auth.User模型),您应该会得到一个错误,因为用户名不能是这里的重复条目。另外,如果你不使用django的默认身份验证模型,你能在这里显示你的模型定义吗?类用户(models.model):username=models.CharField(max_length=200,unique=True)我现在已经做了,但它将数据保存在身份验证用户而不是轮询用户中,这是我的数据库。。。如何更正此问题?@capi,实际上您使用的是UserCreationForm,它是一个模型表单。在此表单的元类中,模型为auth.User。因此,它将数据保存在auth.User模型中。我已经添加了一个编辑部分进行澄清。
#form

class MyUserCreationForm(UserCreationForm):

    class Meta:
         model = PollUser #Your poll user model
         fields = ("username",)

#view

if request.method == 'POST':
            form = MyUserCreationForm(request.POST)
            if form.is_valid():
               ....