generic.edit.CreateView 分配默认值并插入数据库
generic.edit.CreateView Assign Default Values and Insert Into Database
我有以下基于 class 的视图,它使用我的模型生成 "Create" 屏幕:
class ProjectCreateView(generic.edit.CreateView):
model = Project
fields = ['project_title','project_description','created_date']
template_name = 'steps/project-detail.html'
success_url = reverse_lazy('index')
型号:
class Project(models.Model):
project_title = models.CharField(max_length=200)
project_description = models.CharField(max_length=200, default="")
created_date = models.DateTimeField('date created')
owner = models.ForeignKey(User)
def __str__(self):
return self.project_title
现在,问题是如果我不希望 'created_date'
出现在实际表格中。相反,我希望只要按下提交按钮或将记录添加到数据库中,它就会自动填充。我怎样才能做到这一点?
最后,是否也可以默认指定owner
字段?也就是说,我需要用创建此记录的用户的信息填充该字段。
将 owner
和 created_date
排除在您的字段列表之外。然后在调用 super()
.
之前覆盖 form_valid
并在表单实例上设置值
由于您正在设置所有者,因此您可以使用 LoginRequiredMixin
确保只有登录用户才能访问该视图。
from datetime import datetime
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.edit import CreateView
class ProjectCreateView(LoginRequiredMixin, CreateView):
model = Project
fields = ['project_title','project_description']
template_name = 'steps/project-detail.html'
success_url = reverse_lazy('index')
def form_valid(self, form):
form.instance.owner = self.request.user
form.instance.created_date = datetime.now()
return super(ProjectCreateView, self).form_valid(form)
我有以下基于 class 的视图,它使用我的模型生成 "Create" 屏幕:
class ProjectCreateView(generic.edit.CreateView):
model = Project
fields = ['project_title','project_description','created_date']
template_name = 'steps/project-detail.html'
success_url = reverse_lazy('index')
型号:
class Project(models.Model):
project_title = models.CharField(max_length=200)
project_description = models.CharField(max_length=200, default="")
created_date = models.DateTimeField('date created')
owner = models.ForeignKey(User)
def __str__(self):
return self.project_title
现在,问题是如果我不希望 'created_date'
出现在实际表格中。相反,我希望只要按下提交按钮或将记录添加到数据库中,它就会自动填充。我怎样才能做到这一点?
最后,是否也可以默认指定owner
字段?也就是说,我需要用创建此记录的用户的信息填充该字段。
将 owner
和 created_date
排除在您的字段列表之外。然后在调用 super()
.
form_valid
并在表单实例上设置值
由于您正在设置所有者,因此您可以使用 LoginRequiredMixin
确保只有登录用户才能访问该视图。
from datetime import datetime
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.edit import CreateView
class ProjectCreateView(LoginRequiredMixin, CreateView):
model = Project
fields = ['project_title','project_description']
template_name = 'steps/project-detail.html'
success_url = reverse_lazy('index')
def form_valid(self, form):
form.instance.owner = self.request.user
form.instance.created_date = datetime.now()
return super(ProjectCreateView, self).form_valid(form)