中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

django forms定義時的一些小技巧

發布時間:2020-03-25 18:58:45 來源:網絡 閱讀:2129 作者:quxf2012 欄目:開發技術


我們在使用django定義好一個model后,可能需要添加或者修改model數據,此時可以借助于django提供的forms表單組件.

forms表單和model結合使用時,必須在Meta類中指定關聯的model和需要展示的字段(field)

django會自動根據每個字段的類型來生成適合的forms字段

如有一個外鍵字段,django會自動把他轉化成其關聯的對象而不是簡單的展示其關聯的id.

一個簡單的model關聯的forms表單定義,FlowStageForm1.

 

class FlowStageForm1(forms.ModelForm):
    
class Meta:
        model = WorkFlowStage
        fields = 
'__all__'
        exclude = ['work_type']  # 排除該字段

 

 

有時候forms默認的渲染可能不滿足我們的需求,這時就需要通過手動來定義部分字段來滿足我們的需求,沒有手動定義的字段django會默認幫我們渲染.

但是有時候只是想簡單的修改個小地方,如在所有的字段上添加一個默認的類,難道要把所有的字段都定義一遍嗎,很蛋疼.

研究了一下官方文檔,發現還是有方法的

可以在__init__初始化時直接循環所有的字段,給他們添加一些屬性,而不用重新定義他們.

如果一個表有10個字段,有九個字段有共同屬性,而有一個需要單獨定制widget,這時候只需在forms中單獨定義完,__init__初始化添加通用屬性的時候排除他即可,見紅色代碼處.

再如果我們想改變字段widget但又想保留django提供的一些功能,如果一個字段是外鍵,當我們自動在forms中定義過后,就不能使用django默認的功能,需要手動寫代碼去關聯其對象,這時候可以在Meta中使用widgets來單獨定義該字段的widget同時保留了django提供的一些特性,這樣就完美了.

實例見FlowStageForm

 

 

# work_flow是WorkFlowStage的外鍵
class FlowStageForm(forms.ModelForm):
    handler_id = forms.IntegerField(
label="參與人ID"required=False,
                                    
widget=forms.HiddenInput())
    hook_method_name = forms.CharField(
label="鉤子程序方法名"required=False,
                                       
widget=forms.TextInput(attrs={'class''form-control'}))

    
class Meta:
        model = WorkFlowStage
        fields = 
'__all__'
        exclude = ['work_type']  排除該字段
        widgets = {
            
'work_flow': forms.Select(attrs={'class''form-control disabled''required''required'}),   #work_flow是一個外鍵
            
'handler_id_display': forms.TextInput(attrs={'class''form-control disabled''required''required'})

        }

    
def __init__(self, **kwargs):
        
super(FlowStageForm, self).__init__(**kwargs)

        #保存用戶有自定義過的fields不對其進行更改.
       
 declared_fields = []
        
if self.declared_fields:  自定義過的field
            declared_fields += list(self.declared_fields)
        
if self.Meta.widgets:
            declared_fields += list(self.Meta.widgets)  
修改過widgets的部件.


        attrs = {'class''form-control''required''required'}
        
for field in self.fields:
            
if field not in declared_fields:  排除掉有過自定義的field
                self.fields[field].widget.attrs.update(attrs)

 


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江北区| 巴林左旗| 曲阜市| 饶平县| 彰武县| 西峡县| 建始县| 南乐县| 松阳县| 义乌市| 多伦县| 冕宁县| 德清县| 扬中市| 那曲县| 师宗县| 西平县| 色达县| 嘉义市| 雷州市| 夏河县| 长宁区| 澄迈县| 丘北县| 临夏市| 文山县| 太保市| 丰宁| 视频| 涿州市| 山阴县| 金秀| 德格县| 乐亭县| 民乐县| 界首市| 嘉鱼县| 哈尔滨市| 崇文区| 陕西省| 芦溪县|