我想在用户提交表单时在模型中插入一些自定义变量,例如Status。我希望在插入新记录时将字段状态更新为“待处理”。用户插入新表单时,应自动完成此操作。我知道如何使用用户设置的值插入表单,如何插入自己的值。
我当前的形式将所有数据插入db,看起来像这样
def createProcess(request):
form = ProcessForm()
if request.method =='POST':
#print('Printing POST request : ', request.POST)
form = ProcessForm(request.POST)
if form.is_valid():
form.save() # above this i think i can add something to set the status
return redirect('process_list')
context = {'form' : form}
return render(request, 'process/create_process.html', context)
如何自定义例如状态字段的值?我希望状态字段自动更新,而无需用户提交任何信息。
这是模特
class ProcessInfo(models.Model):
process_name = models.CharField(max_length=120, null=True)
process_L2_process_name = models.CharField(default='L2 Process Name', max_length=120, null=True)
process_L3_process_name = models.CharField(default='L3 Process Name', max_length=120, null=True)
process_critical = models.BooleanField(default=True, null=True)
date_created = models.DateTimeField(auto_now_add=True, null=True)
status = models.CharField(max_length=200, null=True, choices=STATUS)
user_rel = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
tags = models.ManyToManyField(Tag)
def __str__(self):
return self.process_name
您可以不使用status
字段创建表格:
class ProcessForm(forms.ModelForm):
class Meta:
model = Process
exclude = ('status',)
在视图中,您可以设置.status
实例的:
from django.contrib.auth.decorators import login_required
@login_required
def createProcess(request):
form = ProcessForm()
if request.method =='POST':
form = ProcessForm(request.POST)
if form.is_valid():
form.instance.status = 'pending'
form.instance.user_rel = request.user
form.save()
return redirect('process_list')
context = {'form' : form}
return render(request, 'process/create_process.html', context)
但是你也可以指定default
值status
在模型中,并设置editable=…
参数[Django的文档],以False
防止它显示出来的形式,则autoamtically设置为默认值:
class ProcessInfo(models.Model):
# …
status = models.CharField(
max_length=200,
null=True,
choices=STATUS,
default='pending',
editable=False
)
def __str__(self):
return self.process_name
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句