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