Python 从django don';t保存在DB中
我想在数据库中保存用户名,但它不起作用。下面是代码。我已经创建了一个名为User的DB,我正试图保存从我创建的html中获取输入的用户。我的数据库用户只包含用户名字段。我使用UserCrationForm作为默认值,我的数据库在phpmyadmin中显示为用户。我认为这不是问题所在。当我试图从shell保存时,它会工作,使用savemodelformPython 从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':
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():
....