python3 django models儲存filefiled欄位統一目錄、不修改檔名的方法
最經編寫一個model時處理filefiled,使用post_form.save()進行新增和編輯檔案儲存位置不統一,如果出現重複檔名重複的話,上傳檔名會被改名。
現有程式碼如下:
models.py
class Wechat_Pubno(models.Model): name = models.CharField(verbose_name='名稱*' , max_length=30 , blank=False , unique=True) qr_code = models.ImageField(verbose_name='二維碼', upload_to='upload/basicdata/wechat_pubno') def __str__(self): return self.name
forms.py
class Forms_Wechat_Pubno(forms.ModelForm):
def __init__(self , *args , **kwargs):
super(Forms_Wechat_Pubno , self).__init__(*args, **kwargs)
self.fields['qr_code'].required = False
class Meta :
model = Wechat_Pubno
fields = '__all__'
views.py
def add(request): if request.method == 'POST': post_form = forms(request.POST,request.FILES) if post_form.is_valid(): post_form.save() #配合post_form = forms(request.POST,request.FILES),web頁面上傳檔案正常儲存,而且不會重複 return HttpResponseRedirect(reverse('list_' + self.model_name)) else : errors_message = post_form.errors write_log('warning' , op_user, model_cnname + '新增失敗' + str(post_form) + ',原因如下:\n' + str(errors_message)) return render(request, 'result.html', {'error_message': str(errors_message)}) else : get_form = forms() request_dict = {'title_name' : title_name , 'get_form': get_form} return render(request, 'add_edit.html', request_dict)
改進views.py
def add(request): if request.method == 'POST': post_form = forms(request.POST,request.FILES) if post_form.is_valid(): # 這段程式碼完全是為了處理filefiled,如果不需要使用filefiled的話,直接post_form.save() media_dir = MEDIA_ROOT.replace(BASE_DIR + '/', '') new_value = {} for key in detail_field_list : # 處理filefield try : if key in filefield_dict : filename = key + '_' + str(request.FILES[key]) # 檔名,欄位名+上傳檔名 file = request.FILES[key] upload_dir = MEDIA_ROOT + '/upload/' + app_name + '/' + model_name + '/' + request.POST.get('name') + '/' # 上傳目錄,MEDIA_ROOT/upload/app名/modles名/欄位name的值/ from library.webpage import uploadfile fullfilename = uploadfile(file, filename, upload_dir) # 最終目錄為MEDIA_ROOT.replace(BASE_DIR,'')/upload/app名/modles名/欄位name的值/欄位名_上傳檔名,防止出現重複替換操作 value = media_dir + '/upload/' + app_name + '/' + model_name + '/' + request.POST.get('name') + '/' + filename # 資料庫中寫相對路徑 else : value = request.POST.get(key) except : value = request.POST.get(key) # 日期轉換 if re.search('^[0-9][0-9][0-9][0-9]/[0-1][0-9]', str(value)) : from library.handle_datetime import date_convert new_value[key] = date_convert(value , '%Y-%m-%d') else: new_value[key] = value try : import_models.objects.create(**new_value) except Exception as e : print('新增資料失敗,' + str(new_value) + ',原因如下:\n' + str(e)) return HttpResponseRedirect(reverse('list_' + model_name)) else : ...... else : ......
edit函式類似
這樣的話,可以統一,便於展示頁面展示圖片
相關推薦
python3 django models儲存filefiled欄位統一目錄、不修改檔名的方法
最經編寫一個model時處理filefiled,使用post_form.save()進行新增和編輯檔案儲存位置不統一,如果出現重複檔名重複的話,上傳檔名會被改名。 現有程式碼如下: models.py
Django Field lookups (欄位查詢)
欄位查詢是指定SQL WHERE子句的核心內容的方式。 它們被指定為QuerySet方法filter()、exclude()和get()的關鍵字引數。 1、exact:精確查詢。如果為比較提供的值為None,則會將其解釋為SQL NULL 在MySQL中,資料庫表的“排序”設定決定了精確的比較是否區
django淺談 過濾欄位內容
views.py class ConsultRecordModelForm(forms.ModelForm): class Meta: model = ConsultRecord # fields = "__all__" exclude=['delet
獲取Django model中的欄位名和欄位的verbose_name
定義模型: class Game(models.Model): name = models.CharField(u'遊戲名稱',max_length=30) gameid = models.CharField(u'遊戲id',max_length=20)
django 擴充套件user使用者欄位inlines
model: class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, verbose_name='暱稱') nickname = models.CharF
Django 資料操作之欄位與引數
Field 點選這裡檢視Github,記得關注哦! 資料操作欄位與其引數 欄位 所有欄位型別: AutoField(Field) int 自增列,必須填入引數 primary_key=True BigAutoField(AutoField) bigint 自增
SQL SERVER 欄位統一補0方法
在SQL SERVER 2008R2的[AdventureWorks2008R2]示例資料庫中,看到以下欄位統一補0方法。 將CustomerID前面加0轉變為AccountNumber欄位。 CREATE TABLE [Sales].[Customer]( [CustomerID] [int] IDEN
models中,欄位引數limit_choices_to的用法
這裡,在使用 ModelForm 渲染前端頁面的前提下,對於 models 中的 ManyToManyField 型別欄位會在 ModelForm 中被轉化為 ModelMultipleChoiceField 型別欄位,對於 models 中的 ForeignKey 型別欄位會在 ModelFo
Spring mvc整合Mybatis,選擇性儲存物件欄位資料
前言 我們平時使用mybatis儲存物件資料時,經常可能只是修改其中某一倆個欄位的值,這個時候,我們為了減少資料庫更新帶來的效能、行鎖等不必要的消耗,可能會重新寫一個介面,只負責修改需要修改的值。 但是,隨著業務系統的變更,業務欄位的增加,越來越多的欄位需要
Django模型層之欄位查詢引數及聚合函式
該系列教程繫個人原創,並完整發布在個人官網劉江的部落格和教程 所有轉載本文者,需在頂部顯著位置註明原作者及www.liujiangblog.com官網地址。 欄位查詢是指如何指定SQL WHERE子句的內容。它們用作QuerySet的filter(), exclude()和get()方法的關鍵字引數。 預設
【Django】orm指定欄位名,表名
1.指定欄位名: 在定義欄位的時候,增加引數db_column=’real_field’; 2.指定表名: 在model的class中,新增Meta類,在Meta類中指定表名db_table 例如在某個
Django Serializer HiddenField隱藏欄位
Django rest_framework serializer.HiddenField(default=serializer.CurrentUser()) 在用Dajngo RestFrame
hibernate儲存blob欄位時出錯 ORA-01465: 無效的十六進位制數字
14:42:22,376 WARN JDBCExceptionReporter:100 - SQL Error: 1465, SQLState: 72000 14:42:22,377 ERROR JDBCExceptionReporter:101 - ORA-01465:
讓django模型中的欄位和model名顯示為中文
簡單方法: models.py class IceCreamBar(models.Model): title = models.CharField(max_length=200,db_index=True,verbose_name="名稱")
mysql group_concat 分組,多欄位統一排序及輸出資料到java
本文不涉及mysql的配置,bean的建立和使用,資料庫連線等教程,僅介紹group_concat輸出到java 假設我們有如下資料 目標:輸出goodsId為1002,已顏色分組的資料。 首先編輯一下sql語句 String sql ="SEL
django獲取某一個欄位的列表,values/values_list/flat
class Building(models.Model): corporation = models.ForeignKey('company.Corporation', verbose_name=u'學校', related_name='buildings')
PostgreSQL之日期欄位統一加一天
開心一笑 高考穿衣注意事項:第一天穿紅色(開門紅),下午穿綠色(一路綠燈),第二天穿灰色和黃色(走向輝煌)。送考的媽媽要穿旗袍(旗開得勝),旗袍開叉要高(分高),送考的爸爸要穿馬褂(馬到成功)。考生一定穿紫內褲,寓意紫腚贏。再有,考生拿到試卷以後不要慌,先親一
Django 資料模型的欄位列表整理
一個模型最重要也是唯一必需的部分,是它定義的資料庫欄位。 欄位名稱限制: 1.一個欄位名不能是一個Python保留字,因為那樣會導致一個Python語法錯誤。 2.一個欄位名不能包含連續的一個以上的下劃線,因為那是Django查詢語句的語法。欄位 列表縱
MySQL儲存的欄位是不區分大小寫的,你知道嗎?
做一個積極的人 編碼、改bug、提升自己 我有一個樂園,面向程式設計,春暖花開! 00 簡單回顧 之前寫過一篇關於mysql 對錶大小寫敏感的問題,其實在mysql中欄位儲存的內容是不區分大小寫的,本篇進行簡單的總結。 想回顧一下: MySQL在Linux下資料庫名、表名、列名、別名
Django常用欄位及引數、事務、資料庫查詢優化
常用欄位 注意: Django中沒有設定對應char型別的欄位,但可以支援自己定義。 自定義對應於資料庫的char型別欄位: from django.db.models import Field class RealCharField(Field): ''' 自定義的char型別欄位