- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中上传文件时遇到问题。用户提交报告并可以添加附件(通过外键关系)。我已经显示了内联表单,如果我将其留空,它会正常工作,但是当我尝试上传文件然后提交表单时,出现 500 错误。基础报告已生成,但内联的附件未保存。
表单.py
class ReportForm(forms.ModelForm):
accidentDate = forms.DateField(widget=SelectDateWidget(
empty_label=("Choose Year",
"Choose Month",
"Choose Day"),
),
label=(u'Accident Date'),
initial=timezone.now())
claimNumber = forms.CharField(max_length=50,
label=(u'Claim Number'),
required=True)
damageEstimate = forms.DecimalField(max_digits=6, decimal_places=2,
label=(u'Damage Estimate'))
description = forms.CharField(widget=forms.Textarea(attrs={'rows': 5,
'cols': 80}
),
label=(u'Description'),
required=True)
drivable = forms.BooleanField(label=(u'Drivable'),
required=False)
receivedCheck = forms.CharField(max_length=30, label=(u'Who Received Check'))
reported = forms.BooleanField(label=(u'Reported to Insurance Company'),
required=False)
reportedDate = forms.DateField(widget=SelectDateWidget(
empty_label=("Choose Year",
"Choose Month",
"Choose Day"),
),
initial=timezone.now(),
label=(u'Date Reported to Insurance'))
repairsScheduled = forms.DateField(widget=SelectDateWidget(
empty_label=("Choose Year",
"Choose Month",
"Choose Day"),
),
initial=timezone.now(),
label=(u'Scheduled Repair Date'))
repairsCompleted = forms.DateField(widget=SelectDateWidget(
empty_label=("Choose Year",
"Choose Month",
"Choose Day"),
),
initial=timezone.now(),
label=(u'Repair Completion Date'))
repairsPaid = forms.BooleanField(label=(u'Repairs Paid'),
required=False)
subrogationReceived = forms.BooleanField(label=(u'Subrogation Received'),
required=False)
subrogationDate = forms.DateField(widget=SelectDateWidget(
empty_label=("Choose Year",
"Choose Month",
"Choose Day"),
),
initial=timezone.now(),
label=('Subrogation Date'))
class Meta:
model = Report
exclude = ('driver',)
ReportAttachmentFormSet = inlineformset_factory(Report, # parent form
ReportAttachment, # inline-form
fields=['title', 'attachment'], # inline-form fields
# labels for the fields
labels={
'title': (u'Attachment Name'),
'attachment': (u'File'),
},
# help texts for the fields
help_texts={
'title': None,
'attachment': None,
},
# set to false because cant' delete an non-exsitant instance
can_delete=False,
# how many inline-forms are sent to the template by default
extra=1)
相关views.py CreateView
class ReportCreateView(CreateView):
model = Report
form_class = ReportForm
object = None
def get(self, request, *args, **kwargs):
"""
Handles GET requests and instantiates blank versions of the form
and its inline formsets.
"""
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
report_attachment_form = ReportAttachmentFormSet()
return self.render_to_response(
self.get_context_data(form=form,
report_attachment_form=report_attachment_form,
)
)
def post(self, request, *args, **kwargs):
"""
Handles POST requests, instantiating a form instance and its inline
formsets with the passed POST variables and then checking them for
validity.
"""
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
report_attachment_form = ReportAttachmentFormSet(self.request.POST, self.request.FILES)
if form.is_valid() and report_attachment_form.is_valid():
return self.form_valid(form, report_attachment_form)
else:
return self.form_invalid(form, report_attachment_form)
def form_valid(self, form, report_attachment_form):
"""
Called if all forms are valid. Creates Report instance along with the
associated ReportAttachment instances then redirects to success url
Args:
form: Report Form
report_attachment_form: Report attachment Form
Returns: an HttpResponse to success url
"""
self.object = form.save(commit=False)
# pre-processing for Report instance here...
self.object.driver = Profile.objects.get(user=self.request.user)
self.object.save()
# saving ReportAttachment Instances
report_attachments = report_attachment_form.save(commit=False)
for ra in report_attachments:
# change the ReportAttachment instance values here
# ra.some_field = some_value
ra.save()
return HttpResponseRedirect(self.get_success_url())
def form_invalid(self, form, report_attachment_form):
"""
Called if a form is invalid. Re-renders the context data with the
data-filled forms and errors.
Args:
form: Report Form
report_attachment_form: Report Attachment Form
"""
return self.render_to_response(
self.get_context_data(form=form,
report_attachment_form=report_attachment_form
)
)
report_form.html
{% block body %}
<p>
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<fieldset>
{{ form.non_field_errors }}
{% for field in form %}
<div class="row">
<div class="col-md-3">{% bootstrap_label field.label %}</div>
<div class="col-md-8">{% bootstrap_field field show_label=False %}</div>
</div>
{% endfor %}
</fieldset>
<fieldset>
<legend>Attachments</legend>
{{ report_attachment_form.management_form }}
{{ report_attachment_form.non_form_errors }}
{% for form in report_attachment_form %}
<div class="inline {{ report_attachment_form.prefix }}">
{% for field in form.visible_fields %}
<div class="row">
<div class="col-md-3">{% bootstrap_label field.label %}</div>
<div class="col-md-8">{% bootstrap_field field show_label=False %}</div>
</div>
{% endfor %}
</div>
{% endfor %}
</fieldset>
<div class="row">
<div class="col-md-1">
<input type="submit" class="btn btn-groppus-primary bordered" value="Submit" />
</div>
</div>
</form>
</p>
{% endblock %}
{% block scripts %}
<script src="{% static 'formset/jquery.formset.js' %}"></script>
<script type="text/javascript">
$(function() {
$(".inline.{{ report_attachment_form.prefix }}").formset({
prefix: "{{ report_attachment_form.prefix }}", // The form prefix for your django formset
addCssClass: "btn btn-block btn-primary bordered inline-form-add", // CSS class applied to the add link
deleteCssClass: "btn btn-block btn-primary bordered", // CSS class applied to the delete link
addText: 'Add another attachment', // Text for the add link
deleteText: 'Remove attachment above', // Text for the delete link
formCssClass: 'inline-form' // CSS class applied to each form in a formset
})
});
</script>
{% endblock %}
很难弄清楚这个问题,因为它没有给我任何类型的回溯来处理,我在表单中包含了 enc-type,并在 views.py 文件中传递了 request.FILES .我的文件上传工作正常,但事实证明内联很麻烦。
如果您需要我澄清任何事情,请告诉我,感谢您的帮助:)
更新:通过使用 @method_decorator(csrf_exempt, name='dispatch')
这给了我一个 ValueError: save() prohibited 以防止由于未保存的相关对象“报告”而导致数据丢失。从跟踪中我可以看到我的文件实际上正在进入内存,问题在这里:
将随着我的进步继续更新,似乎这种保存 FK 对象的方法在 1.8 之前完美无缺,所以如果我幸运的话,这是一个快速修复以正确保存对象的方法。
最佳答案
我需要做的就是将我正在使用的报告表单的实例传递给表单集,既简单又好用。所以在我的 CreateView 的 post 方法中,我将 report_attachment_form 的声明更改为.
关于django - 在内联表单集中使用 Django FileField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41599809/
我想做一个系统,用户可以上传和下载文件。系统将具有一个集中的地形,但在很大程度上依赖于节点将相关数据通过中心节点传输给其他节点我不希望对等端保存整个文件,而是希望它们保存整个数据集的一个压缩的加密部分
我正在 Riverpod Auth 流程样板应用程序中工作。 我想对所有异步功能甚至登录和注销使用通用加载屏幕。目前,如果 Appstate 加载我显示加载屏幕,我有 AppState 提供程序。它可
我有一个 functions.php 文件,其中包括以下功能: function head() { global $brand, $brandName, $logo, $slogan, $si
我有下一个 html 代码 ... 我想选择随机的 div 数组来向它们添加一个事件类,因为我使用这个 jquery 代码 function randOrder() { return
多年来,我创建并调整了一组NAnt脚本以执行完整的项目构建。主脚本采用一个应用程序端点(例如,一个Web应用程序项目),并从源代码控制中对其进行完整的构建。脚本已预先配置了与构建输出位置,源代码控制地
我希望我的 jQuery 插件在 $(window) 选择上调用时表现不同。如何检查 window 是否在集合中?到目前为止我的尝试: >>> $(window) == $(window) false
考虑到我们有 let existingSet = $(); 如何通过 jQuery 将 newElements 添加到该集合中? existingSet = existingSet.add(newEl
我需要在 priority_queue 中保存一个整数集合。但是我需要能够删除这些整数中的一个,即使它不是我容器的第一个元素。我无法使用 std::priority_queue。我选择使用一个集合来根
对于我的网站,我一直在尝试集中所有内容以便在移动设备上显示: http://m.bachatdeals.com 我在移动设备上打开网站后,内容下方有很多空间,我必须捏住 zoon 才能阅读,如何删除下
我计划为我的剑道验证器制定一些自定义规则,并希望在所有验证器之间共享。在我的验证器代码中,我有: rules: { bothorblank: function (input) {
这是我的函数,用于测试两个点 x 和 y 在 MAX_ITERATION 255 之后是否在 mandelbrot 集合中。如果不在,它应该返回 0,如果在,则返回 1。 int isMandelbr
致力于从移动设备扩展到桌面设备的简单网站布局。一切都按预期工作,但由于某种原因,我的 float div 没有集中放置。我已经完成了正常工作,但这次不适合我?有什么想法吗? 这是我的 CSS: /*
我的“div”元素有一个相对宽度,它不是绝对的,所以我不能使用精确的数字来集中。一个不错的解决方案是使用“display: inline-block”: body { text-align:
目前我拥有的所有类都处理它们自己的导入。使用一个典型的例子: [ImportMany] private Lazy[] someOfMyInterfaces { get; set; } public M
我有一个类定义: class Question: title = "" answer = "" def __init__(self, title, answer):
我正在尝试将一个对象 Point2D 插入到一个 Point2D 集合中,但我做不到,似乎该集合适用于 int 和 char 但不适用于对象。 我需要帮助来了解如何将对象插入到集合中???假设我想按
我的应用上有一些弹出窗口,它是全屏的,代码如下: content.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
我们有一个多模块 Quarkus 项目,带有一个公共(public)库和多个应用程序。在通用的 lib 中,我们有各种缓存用于所有应用。 我们希望不必在每个应用程序的所有配置文件中配置保留和容量。 有
这个问题在这里已经有了答案: Nested facets in ggplot2 spanning groups (2 个回答) 去年关闭。 我在 ggplot 中创建了一个图表里面有两个变量 face
我无法集中v-radio-group。这是我得到的:
我是一名优秀的程序员,十分优秀!