又是美好的一天,所以我有一個表單,用戶可以添加多個標題。每次提交都會創建一個新物件,其中包括書面標題和撰寫它的用戶(提交表單)。
我試過了,但我不知道在 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)
我正在使用基本的用戶模型。目前,用戶可以提交表單,一個新物件將僅使用給定的標題創建,但沒有撰寫它的用戶,因為我只是添加了 title=title 而不是 user=...
有任何想法嗎?
uj5u.com熱心網友回復:
如果您想更新現有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(…)部分,以便如果表單失敗,您可以使用錯誤訊息重新呈現表單。
如果你想每次都創建一個新的,你不能用 a 來做到這一點OneToOneField:a OneToOneFieldis a ForeignKeywith unique=True:這意味著用戶最多有一個NewTitle參考該用戶的物件。如果您希望能夠構建多個,則可以使用 a ForeignKey:
from django.conf import settings
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)
然后視圖看起來像:
from django.contrib.auth.decorators import login_required
@login_required
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})
但你當然可以不取.newtitle一的User物件,因為有可能是零,一個或多個的。
注意:通常使用
settings.AUTH_USER_MODEL[Django-doc]參考用戶模型比直接使用User模型 [Django-doc]更好。有關更多資訊,您可以查看檔案的參考User模型部分。
注意:您可以使用
@login_required裝飾器 [Django-doc]將視圖限制為經過身份驗證的用戶的視圖 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/417355.html
標籤:
上一篇:Django不評估模板變數
