python - 使用传递给 Django 中 URL 的值提交后如何手动填写表单字段?
问题描述
我有这种形式,用户必须上传文件(收据),然后用外键连接该文件。我创建了一个接收文件的简单表单,它也运行良好。但是,我必须将该文件与另一个模型的外键一起保存在数据库中。现在我的模型只有文件作为关系和外键。我的表单只有文件上传字段,因为我显然不希望用户选择它应该是什么外键。我希望用 URL 中给定的值自动填充该外键。我这样调用函数:
href="{% url 'suppliers:model_form_upload' quiz.id %}"
我得到quiz.id
正确的地方。
这是我的模型:
class Uploaded_pod(models.Model):
document = models.FileField(upload_to='pods/')
lr_connected = models.ForeignKey(LR, on_delete=models.CASCADE, related_name='lr_pod')
我试过的
这是我的 views.py 函数:
def pod_upload (request, pk):
lr_object = get_object_or_404(LR, id=pk)
if request.method == 'POST':
form = UploadPODform(request.POST, request.FILES)
form.lr_connected = lr_object
form.save()
if form.is_valid():
form.lr_connected = lr_object
form.save()
return redirect('home')
else:
form = UploadPODform()
form.lr_connected = lr_object
return render(request, 'classroom/suppliers/model_form_upload.html', {'form': form})
如您所见,我试图form.lr_connected
用我刚刚使用 URL 中传递的 pk 值过滤的对象填充该部分。
这是我的表格:
class UploadPODform(forms.ModelForm):
class Meta:
model = Uploaded_pod
fields = ('document',)
我也打印了这个对象lr_object
,它工作得很好。但是,当我去页面上传文件时,它告诉我
“lr_connected_id”列中的空值违反非空约束细节:失败行包含 (10, pods/csv_BET4hl8.svg, null)。
很明显,我的 lr_connected 字段没有被我试图传递的对象填充。
这可能吗??有没有更好的办法 ???
我按照本指南上传文件。这是使问题复杂化的原因吗?
这是我的 html 呈现为:
{% block content %}
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Upload</button>
</form>
<p><a href="{% url 'home' %}">Return to home</a></p>
{% endblock %}
在这里你可以看到我添加了打印语句,它显示在我的终端中它找到了 ID 为 5 的 lr_object。
解决方案
您需要将值分配给实例,而不是表单。
if request.method == 'POST':
form = UploadPODform(request.POST, request.FILES)
if form.is_valid():
obj = form.save(commit=False)
obj.lr_connected = lr_object
obj.save()
推荐阅读
- mysql - mysql - 在一个字段中提取多个匹配项
- android - 在应用程序中,我们是否有办法自定义共享意图对象,以便我们在电子邮件选择器中而不是在短信选择器中添加额外的文本?
- c# - 检查列表是否为空时哪个更好:不为空或使用任何
- python - 如何使用 OpenCV、人脸识别、Flask、Python 3 和 Heroku 在客户端打开相机
- php - 插入查询时间 PHP
- javascript - 带有 sigma.js 和 bolt 的 Neo4j Javascript 应用程序
- azure-devops - 添加文件以构建包工件
- ios - TestFlight 的公共链接的兑换码在哪里?
- bash - Fiddler 不显示来自 git bash 客户端的 HTTPS 流量
- django - Django - 导入 .txt 文件以填充数据