DetailView+CreateView(参考サイト)を使いデータベースに編集履歴が残る台帳を作っています。
編集(ファイルアップロードも含む)をすると新しく行が追加され理想通りに動きます。次回編集時には、文字等はフォームに入力されているため登録されますが、ファイルアップロードの欄が空欄な為、履歴には空欄が登録されてしまいます。
値はあるので初期値で行こうとしたら、type=fileなので出来ませんでした。
これを、UpdateViewの動作のような、ファイルアップロードしない時は変えずに登録することはできないでしょうか?
初回編集時(ファイルアップロードする、~/カレンダー.pdfが登録)
次回編集時(ファイルアップロードしない、「選択されていません」の状態なので空欄が登録される)
### コード
Python
1#models.py 2class UploadModel(models.Model): 3 Name = models.CharField(db_column='名前', max_length=255, blank=True, null=False, primary_key=True) 4 attach = models.FileField(upload_to=directory_path, blank=True, null=True, validators=[FileExtensionValidator(['pdf', ])]) 5 class Meta: 6 managed = False 7 db_table = '台帳履歴'
Python
1#forms.py 2class UploadForm(forms.ModelForm): 3 Name = forms.CharField(label='名前', max_length=255, widget=forms.TextInput(), required=True) 4 attach = forms.FileField(label='PDFファイル', required=False) 5 class Meta: 6 model = UploadModel 7 fields = ('Name','attach',)
Python
1#views.py 2class DetailView(generic.DetailView): 3 model = UploadModel 4 template_name = 'UploadModel/detail.html' 5 6class DetailCreateView(LoginRequiredMixin, ModelFormMixin, generic.DetailView): 7 login_url = '/accounts/login/' 8 model = UploadModel 9 form_class = UploadForm 10 template_name = 'UploadModel/update.html' 11 def get_success_url(self): 12 return reverse('UploadModel:detail', kwargs={'pk': self.kwargs['pk']}) 13 14 def form_valid(self, form): 15 post_pk = self.kwargs['pk'] 16 comment = form.save(commit=False) 17 comment.post = get_object_or_404(UploadModel, pk=post_pk) 18 comment.save() 19 return redirect('UploadModel:detail', pk=post_pk) 20 21 def post(self, request, *args, **kwargs): 22 form = self.get_form() 23 if form.is_valid(): 24 return self.form_valid(form) 25 else: 26 self.object = self.get_object() 27 return self.form_invalid(form)
html
1<!--update.html--> 2{% extends 'main/layout.html' %} 3{% load static %} 4{% block content %} 5<form name="form" method="post" onsubmit="return false;" enctype="multipart/form-data"> 6 {% csrf_token %} 7 <table> 8 <tbody> 9 <tr><td>名前*</td> 10 <td>{{ form.Name }}</td> 11 </tr> 12 <tr><td height="50" width="30%">PDFアップロード</td> 13 <td width="70%">{{ form.attach }} 14 {% if form.attach.errors %} 15 <span style="color:red;font-size:small">{{ form.attach.errors }}</span> 16 {% endif %} 17 </td> 18 </tr> 19 </tbody> 20 </table> 21</form> 22{% endblock %}
###環境
Python:3.7
Django:2.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/21 23:05
2019/04/26 04:54