Django: у атрибута inlineformset 'нет файла, связанного с ним' ошибка
У меня есть встроенный набор форм, я могу загрузить несколько экземпляров модели одновременно. Как вы добавляете файл? Я продолжаю получать это сообщение об ошибке "Атрибут" документ "не связан с файлом".
Ошибка происходит здесь: if formset.is_valid():
Модели класса A(models.Modle): всего...
class B(models.Model):
invoice_id = models.ForeignKey(A)
misc_amt... = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)
document = models.FileField(upload_to='images/', blank=True)
если я добавлю это свойство, я получу другую ошибку: datastructures.MultiValueDictKeyError: "'b-0-id'"
@property
def document_url(self):
if self.document and hasattr(self.document, 'url'):
return self.document.url
formset
BFormSet = inlineformset_factory(A, B,
extra=0,
widgets={
'misc_amt':forms.TextInput(attrs={'size': '6',}),
'document':forms.FileInput(attrs={'multiple': False}),
}
)
HTML
<form method="post" enctype="multipart/form-data">{% csrf_token %}
{{ b_form.management_form }}
<table class="table" >
<tr class="text-center">
<td><strong>Misc.</strong></td>
<td><strong>Document</strong></td>
</tr>
{% for form in getperinfo_form.forms %}
<tr class="text-center">
<td>${{ form.misc_amt }}</td>
<td>{{ form.document }}</td>
</tr>
{% endfor %}
</table>
</form>
views.py
class AUpdateView(LoginRequiredMixin, UpdateView):
model = B
form_class = BForm
template_name = 'A.html'
def post(self,request,*args,**kwargs):
self.object =None
form_class = self.get_form_class()
form = self.get_form(form_class)
qs = A.objects.filter(
...
)
formset = BFormSet(self.request.POST,instance=qs.first())
if formset.is_valid():
return self.form_valid(formset)
else:
return self.form_invalid(form,formset)
def form_valid(self,formset):
formset = formset.save(commit=False)
for i in formset:
i.save()
return HttpResponseRedirect(self.get_success_url())
1 ответ
Решение
Добавлять request.FILES
слишком в форме
formset = BFormSet(request.POST,request.FILES, instance=qs.first())