[英]Django how to save User Model?
又是美好的一天,所以我有一个表单,用户可以添加多个标题。 每次提交都会创建一个新的 object,其中包括书面标题和编写它的用户(提交表单)。
我试过了,但我不知道在 NewTitle.objects.create(title=title, ...) 中添加什么
\views.py
def title_view(request):
try:
profile = request.user.newtitle
except NewTitle.DoesNotExist:
profile = NewTitle(user=request.user)
if request.method == 'POST':
form = NewTitleForm(request.POST, instance=profile)
if form.is_valid():
title = form.cleaned_data["title"]
NewTitle.objects.create(title=title) #in the () I have to add the user= aswell
return redirect('/another')
else:
form = NewTitleForm(instance=profile)
return render(request, 'test.html', {'form': form, 'profile': profile})
\模型.py
class NewTitle(models.Model):
user = models.OneToOneField(
User, default=None, null=True, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
我正在使用基本用户 model。 目前,用户可以提交表单,新的 object 将仅使用给定的标题创建,但没有编写它的用户,因为我只是添加了 title=title 而不是 user=...
有任何想法吗?
如果您想为该用户更新现有的NewTitle
,或者如果不存在这样的项目,则创建一个新的,您可以.save()
form
,因此:
from django.contrib.auth.decorators import login_required
@login_required
def title_view(request):
try:
profile = request.user.newtitle
except NewTitle.DoesNotExist:
profile = NewTitle(user=request.user)
if request.method == 'POST':
form = NewTitleForm(request.POST, instance=profile)
if form.is_valid():
form.save()
return redirect('/another')
else:
form = NewTitleForm(instance=profile)
return render(request, 'test.html', {'form': form, 'profile': profile})
您还应该识别return render(…)
部分,以便如果表单失败,您可以使用错误消息重新呈现表单。
如果你想每次都创建一个新的,你不能用OneToOneField
来做到这一点: OneToOneField
是一个具有unique=True
的ForeignKey
:这意味着用户最多有一个引用该用户的NewTitle
object。 如果您希望能够构建多个,则可以使用ForeignKey
:
from django.conf import settings
from django.contrib.auth.decorators import login_required
@login_required
class NewTitle(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
default=None,
null=True,
on_delete=models.CASCADE
)
title = models.CharField(max_length=200)
然后视图看起来像:
def title_view(request):
if request.method == 'POST':
form = NewTitleForm(request.POST, instance=NewTitle(user=request.user))
if form.is_valid():
form.save()
return redirect('/another')
else:
form = NewTitleForm()
return render(request, 'test.html', {'form': form})
但是您当然不能获取User
.newtitle
的 .newtitle,因为可以有零个、一个或多个。
注意:通常使用
settings.AUTH_USER_MODEL
[Django-doc]引用用户 model 比直接使用User
model [Django-doc] 更好。 有关更多信息,您可以查看参考文档的User
model部分。
注意:您可以使用
@login_required
装饰器 [Django-doc]将视图限制为经过身份验证的用户的视图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.