Django forms 關於select和checkbox設置初始選中值


Django的forms和models一樣很牛逼。他有兩種功能,一是生成form表單,還有就是form表單的驗證。

這里主要說一下生成form表單時經常用到的需要設置 初始值 / 默認值 的情況。

1. 前端在展示checkbox時,希望設置一個默認選中的選項。如下圖:

先來看一下form是如何定義的:

也就是說我們要在前端生成頁面的時候,讓他把2那一項選中,要怎么做呢?

方法一:

先來看一個東西,在django/forms/widgets.py文件中,有一個字段如下圖

這里有個_empty_value字段就是設置默認值的。

在定義form時,在構造方法中利用該字段為其配置默認選項:

(這里可能有疑問為啥該字段的值要是個列表?因為定義的這個form類型是一個多選。。。)

看到PEP8提示的波浪線就知道這玩意兒不是個好方法,很顯然還有別的方法。

方法二:

利用initial,在定義form的時候設置初始值。

方法三:

利用initial,在生成form示例的時候設置初始值。

2. 前端在展示select時,希望設置一個默認選中的選項。如下圖:(我們這里定義了一個單選的select)

 

還是先來看一下form的定義:

我們希望在前端顯示時,能夠默認選中2那一項,如下圖:

 這個時候基本上跟上例中都是一樣的方法。

方法一:

還是在定義form的時候為city字段設置一個初始值

方法二:

生成form實例的時候為city字段設置一個初始值

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "Q1mi"
# Email: master@liwenzhou.com

from django import forms


class SelectTestForm(forms.Form):
    city = forms.IntegerField(
        widget=forms.Select(
            choices=(
                (1, "BeiJing"),
                (2, "WeiHai"),
                (3, "RuShan"),
            ),
            attrs={
                "class": "form-control",
            }
        ),
        required=True
    )

    modes = forms.TypedChoiceField(
        coerce=lambda x: x == "1",
        choices=(
            (1, "負載均衡"),
            (2, "極致性能"),
            (3, "超級無敵"),
        ),
        widget=forms.CheckboxSelectMultiple(

        ),
    )

    def __init__(self, *args, **kwargs):
        super(SelectTestForm, self).__init__(*args, **kwargs)
        # self.fields["modes"].widget._empty_value = [2, ]  # 方法1
        self.initial["modes"] = [2, ]  # 方法2
        self.initial["city"] = 2
form代碼
from django.shortcuts import render, HttpResponse
from testapp.forms import select_test

# Create your views here.


def test(request):
    f = select_test.SelectTestForm(initial={"city": 2, "modes": [2, ]})  # 方法2
    if request.method == "POST":
        print(request.POST)
        return HttpResponse("OK")
    else:
        return render(request, "test/select_test.html", {"f": f})
views代碼

3. 從數據庫里查詢數據返回前端展示時,如何在前端的標簽中選中的指定的選項。

將數據庫中查詢出來的選中的authors的id作為參數傳入BookForm類生成一個對象將該form對象傳到前端就可以准確展示出那些選中的值

這里如果寫成f = change_book.BookForm()的話,前端只會展示出空的表單(當然select標簽會默認選中第一個),不會顯示出數據庫中保存的對應的值。

 搜集和整理資料不易,轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM