我有以下模型/表單/視圖:
模型
class Account(models.Model):
username = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
name = models.CharField(max_length=150)
identifier_type = models.ForeignKey(IdentifierType, on_delete=models.SET_NULL, null=True)
actflag = models.CharField(max_length=1, blank=True)
created_date = models.DateTimeField(blank=True, null=True)
comments = models.TextField(_(
'comments'), max_length=500, blank=True)
priority_type = models.ForeignKey(PriorityType, on_delete=models.SET_NULL, null=True)
deadline_date = models.DateTimeField(blank=True, null=True)
def __str__(self):
return self.name
形式
class PortfolioForm(forms.ModelForm):
portfolio = forms.CharField(widget=forms.Textarea)
class Meta:
model = Account
fields = ['name', 'comments', 'priority_type', 'deadline_date', 'identifier_type', 'portfolio']
看法
def portfolios(request):
if request.user.is_authenticated:
if request.POST:
fm = PortfolioForm(request.POST)
user = User.objects.get(username=request.user)
if fm.is_valid():
messages.success(request, 'Portfolio has been created.')
fm.save()
return redirect('portfolios')
else:
fm = PortfolioForm()
context = {"name": request.user, "form": fm}
return render(request, 'portfolios.html', context)
else:
return redirect('login')
該表格適用于通過我的模板發布,但是您會注意到我的模型中有一些欄位不在我的表格中我想自動填寫而無需用戶填寫 - 例如用戶名欄位我想要這個成為提交表單的當前用戶,并且 created_date 想要用戶提交表單的當前日期時間。
我嘗試在 if fm.is_valid() 下將以下內容添加到我的視圖中:嘗試將用戶名作為當前用戶保存到模型中,但沒有奏效:
Account.objects.username = request.user
我該怎么做呢?提前致謝
uj5u.com熱心網友回復:
Account保存表單時,您可以在創建物件后保存這些值。如果您commit=False在save方法中使用引數,這不會影響資料庫,您可以輕松修改Account物件。
from django.utils import timezone
def portfolios(request):
if request.user.is_authenticated:
if request.POST:
fm = PortfolioForm(request.POST)
# user = User.objects.get(username=request.user)
if fm.is_valid():
account = fm.save(commit=False)
account.username = request.user
account.created_date = timezone.now()
account.save()
messages.success(request, 'Portfolio has been created.')
return redirect('portfolios')
else:
fm = PortfolioForm()
context = {"name": request.user, "form": fm}
return render(request, 'portfolios.html', context)
else:
return redirect('login')
uj5u.com熱心網友回復:
您可以使用 django 表單instance來保存任何預定義的值,而無需向您的用戶或 html 模板顯示或呈現這些欄位。這是一個如何自動保存您的用戶名和 created_date 欄位的示例。
if fm.is_valid():
fm = fm.save(commit=False)
fm.instance.user = request.user
fm.instance.created_date = timezone.now()
fm.save()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/406909.html
標籤:
