django - Django:如何将自定义字段添加到表单保存的数据中?
问题描述
当用户提交表单时,我想在模型中插入一些自定义变量,例如状态。我希望在插入新记录时将字段状态更新为待处理。这应该在用户插入新表单时自动完成。我知道如何使用用户设置的值插入表单,我如何插入自己的值。
我当前将所有数据插入数据库的表单,它看起来像这样
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-doc]以False
防止它出现在表单中,然后它会自动设置为默认值:
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
推荐阅读
- javascript - 将一个 javascript 文件中评估的敏感变量值传递给另一个 javascript 文件
- .net - 本地数据库、实体框架和 WinForms
- java - 如何使用 PrintWriter 从路径创建丢失的文件夹?
- sql-server - sum(isnull(DB.budget_amount,0)) OVER(Partition by DB.ACCOUNT)as YearTotalBudget (将这一行添加到 group by 会导致问题)
- ios - IOS 12中sqlite文件的位置在哪里?
- ajax - 在 Apache 服务器上启用 ssl 后,AJAX POST 请求出现错误 301
- c# - NAudio - 录制多个设备并保存到 MP3
- mysql - mysql根据条件限制比较中的行数
- neo4j - neo4j - 返回第一行,不分组
- javascript - chrome.history 和 chrome.browsingData 未定义,即使添加了权限