Djago Form元件動態繫結資料

2022-02-17 08:03:44 字數 1853 閱讀 2147

用form元件生成下拉框時,通常下拉框內的資料從資料庫中獲取。當在資料庫中更新或者新增資料時,發現在重新整理瀏覽器頁面時,下拉框內的資料無變化。需要重新啟動django在實際中這是不合理的

# views.py

class test2form(forms.form):

user = fields.choicefield(choices=models.userinfo.objects.values_list('id','username'))

def test2(request):

obj = test2form()

return render(request,'test2.html',)

# 資料庫

id username email

1 小白 [email protected]

2 小花 [email protected]

# html

姑娘:}

step1:django啟動時,class類就會執行,下拉框中獲取資料庫中的資料

step2:新增或修改資料庫中的資料,重新整理瀏覽器頁面。下拉框中的資料不隨著更新

step3:因為在重新整理頁面時,class中的類屬性並不會再重新生成,所以一直保留最開始的資料

class test2form(forms.form):

user = fields.choicefield()

# 在類中定義__init__()函式

def __init__(self,*args,**kwargs):

super().__init__(*args,**kwargs)

# self.fields必須寫在super()下面。因為super會將類屬性全拷貝,self.filelds才能取到值

self.fields['user'].choices=models.userinfo.objects.values_list('id','username')

def test2(request):

obj = test2form()

return render(request,'test2.html',)

使用django自帶的modelchoicefield欄位生成下拉框。看起來似乎比方法一簡單,但是不推薦使用。因為需要在models中寫str方法。如果在另乙個的下拉框中要顯示別的欄位就不好操作了,與models耦合度高

from django.forms.models import modelchoicefield  # 需要匯入

class test2form(forms.form):

user = modelchoicefield(queryset=models.userinfo.objects.all(),to_field_name='username')

'''queryset, # 查詢資料庫中的資料

empty_label="---------", # 預設空顯示內容

to_field_name=none, # html中option中value的值對應的字段

'''在瀏覽器頁面下拉框中顯示 '表名 object' ,所以還需要修改model.py檔案

# models.py

class userinfo(models.model):

username=models.charfield(max_length=32)

email=models.emailfield(max_length=32)

def __str__(self):

return self.username

Djago Form元件動態繫結資料

目錄用form元件生成下拉框時,通常下拉框內的資料從資料庫中獲取。當在資料庫中更新或者新增資料時,發現在重新整理瀏覽器頁面時,下拉框內的資料無變化。需要重新啟動django在實際中這是不合理的 views.py class test2form forms.form user fields.choic...

Vue 遞迴元件與動態樣式繫結

元件是可以在自己的模板中呼叫自身的,不過它們只能通過name選項 item v for item,index in list key index item back span item title border bottom div item.children class item children...

jquery 上傳元件如何動態繫結引數傳遞到後台

upload photo uploadify onuploadstart function file onuploadsuccess function file,data,response 動態傳遞引數需要通過紅色部分實現 1 首先新增onuploadstart函式,在上傳開始時設定引數 2 通過 ...