python - 如何将视图中的参数传递到 django 中的 modelForm 中?
问题描述
我的目标是让用户上传文档,但我的程序会自动命名文档。本质上,从视图中我将名称传递到表单中,该名称被放置在我的文档模型的“描述”字段中。谢谢!
视图.py
def testing(request):
if request.method == 'POST':
name = 'testing'
form = DocumentForm(request.POST, request.FILES, description=name)
if form.is_valid():
form.save()
return redirect('landing')
else:
form = DocumentForm()
return render(request, 'testing.html', {
'form': form
})
表格.py
class DocumentForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
description = kwargs.pop('description')
super(DocumentForm,self).__init__(*args, **kwargs)
self.fields['description'].initial = description
class Meta:
model = Document
fields = ('description', 'document', )
模型.py
class Document(models.Model):
description = models.CharField(max_length=255, blank=True)
document = models.FileField(upload_to='documents/')
uploaded_at = models.DateTimeField(auto_now_add=True)
解决方案
从 ModelForm 更新新实例只需要修改视图中的保存。如果这不是您的意思,请告诉我,我应该能够提供进一步的帮助。
def testing(request):
if request.method == 'POST':
name = 'testing'
form = DocumentForm(request.POST, request.FILES, description=name)
if form.is_valid():
# get instance but don't commit to database
doc = form.save(commit=False)
# do modifications to the instance here.
doc.description = name
# save the instance with all modifications
doc.save()
return redirect('landing')
else:
form = DocumentForm()
return render(request, 'testing.html', {
'form': form
})
更新 1
您kwargs.pop("description")
需要执行以下操作。正在发生的事情是,在您的 else 中,您创建了没有 description 关键字的表单。
class DocumentForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(DocumentForm,self).__init__(*args, **kwargs)
if 'description' in kwargs:
description = kwargs.pop('description')
self.fields['description'].initial = description
class Meta:
model = Document
fields = ('description', 'document', )
推荐阅读
- r - 在 LEA 中使用 struct2geno 时,“不允许重复的 'row.names'”
- r - R:替换下划线非连续重复两次以上
- javascript - CSS过渡到特定位置
- javascript - 开发工具在 Electron 中的大小和位置
- node.js - 请求正文必须包含以下参数:'grant_type'...但我把它放在正文中
- php - 如何在内部创建一个自动递增的 ID
- 已经在while循环中的标签?
- wso2 - WSO2 身份服务器多个回调 URL 中断 checksession 端点
- jquery - Jquery隐藏/显示延迟修复
- amazon-s3 - AWS S3 的保留参数名称列表
- ms-access - 表单输入数据访问 2013 中的输入、编辑操作