您好,登錄后才能下訂單哦!
今天小編給大家分享一下django-admin如何實現動態多選框表單的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
借助django-admin,可以快速得到CRUD界面,但若需要創建多選標簽字段時,需要對表單進行調整
model.py
一個tag(標簽類),一個book(書本類)
book攜帶tag,這里不借助有性能問題的外鍵
class tag(models.Model):
name = models.CharField(max_length=20, verbose_name='標簽')
class book(models.Model):
name = models.CharField(max_length=50, verbose_name='書名')
tags = models.TextField(null=True, verbose_name='標簽')
admin.py
將對應的model到admin中注冊,才能被django-admin發現并使用,所以主要步驟在此,有以下注意點:
values_list返回:<QuerySet [('tag1', 'tag1'), ('tag2', 'tag2')]>
保證最新標簽列表:在表單初始化才執行一次標簽查詢
表單修改顯示標簽:在表單初始化賦值列表對象
# 標簽查詢
def get_tag_list():
return tag.objects.values_list("name", "name")
# 表單類定義
class bookForm(forms.ModelForm):
tags = forms.MultipleChoiceField(label='標簽', widget=widgets.CheckboxSelectMultiple)
def __init__(self, *args, **kwargs):
super(cameraForm, self).__init__(*args, **kwargs)
# 保證每次初始化有最新的標簽列表
self.fields['tags'].choices = get_tag_list()
# 由于會在數據庫中存儲為列表字符串,需在賦值時轉回列表對象,才能在修改表單時識別原值
self.initial['tags'] = eval(self.initial['tags'])
class Meta:
model = book
exclude = []
# book擴展
class bookAdmin(admin.ModelAdmin):
search_fields = 'name', 'tags')
list_display = ( 'name', 'tags')
form = bookForm
# 注冊到admin中
admin.site.register(book, bookAdmin)
以上就是“django-admin如何實現動態多選框表單”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。