Django 将时间值和用户值传递给 forms.py



我有一个这样的模型:

from django.db import models
from django.contrib.auth.models import User
class Task(models.Model):
title = models.CharField(max_length=200)
pub_date = models.DateTimeField(default)
completed = models.BooleanField(default=False)
description = models.TextField()
user = models.ForeignKey(User, on_delete=models.CASCADE)
def summary(self):
return self.description[:50]
def pub_date_pretty(self):
return self.pub_date.strftime('%b %e %Y')
def __str__(self):
return self.title

我有一个这样的 forms.py,因为我不希望用户能够确定哪个用户正在保存数据,我希望现在pub_date时间:

from django import forms
from .models import Task
from django.utils import timezone
class Taskform(forms.ModelForm):
class Meta:
model = Task
fields = ['title', 'description', 'completed']

我的观点是这样的:

@login_required
def create(request):
form = Taskform(request.POST or None)
task = Task()
task.pub_date = timezone.datetime.now()
task.user = request.user
if form.is_valid():
form.save()
return redirect('')
return render(request, 'home/create.html', {'form': form})

我想在表单验证时将时间和用户传递给表单,但我不确定如何?

您可以将form.save()commit=True参数一起使用来获取任务实例并更新它:

if form.is_valid():
task = form.save(commit=False)
task.pub_date = timezone.datetime.now()
task.user = request.user
task.save()
return redirect('')

在此处查看详细信息。

最新更新