Các thuộc tính cơ bản của form và field

Subscribe to my newsletter and never miss my upcoming articles

Form ràng buộc và không ràng buộc

Một thực thể Form có thể bị ràng buộc với tập dữ liệu hoặc không bị ràng buộc.

  • Nếu nó bị ràng buộc với một tập dữ liệu, nó có khả năng xác thực dữ liệu này và render như một HTML form có hiển thị dữ liệu.
  • Nếu không bị ràng buộc, nó không thể thực hiện xác thực, và render một HTML form trống.

Để tạo một form không ràng buộc, sử dụng hàm tạo mà không cung cấp đối số nào:

form = ContactForm()

Để tạo một form ràng buộc với tập dữ liệu, truyền cho hàm tạo dữ liệu đó dưới dạng một từ điển:

data = {
    'subject': 'hello',
    'message': 'Hi there',
    'sender': 'foo@example.com',
    'cc_myself': True
}

form = ContactForm(data)

Các thuộc tính của form

is_bound

True nếu form bị ràng buộc, False nếu form không bị ràng buộc.

initial

Giá trị ban đầu của form.

changed_data

Trả về danh sách các tên trường mà giá trị của nó đã thay đổi so với giá trị ban đầu cung cấp bởi initial.

errors

Từ điển với khóa là tên trường, giá trị là danh sách các thông báo lỗi của trường này. Nếu truy cập errors trước khi gọi is_valid() thì is_vaild() sẽ tự động được gọi.

fields

Trả về các trường của form. Ta có thể truy cập tới từng trường cụ thể thông qua tên của nó:

form.fields['name']

cleaned_data

Dữ liệu sau khi đã xác thực thành công.

Nếu is_valid() trả về False thì cleaned_data chỉ chứa các trường hợp lệ.

Nếu is_valid() trả về True thì cleaned_data gồm khóa và giá trị cho tất cả các trường ngày cả khi trường không chứa giá trị (khi trường này là không bắt buộc).

Các phương thức của form

is_valid()

Chạy xác thực và trả về giá trị boolean cho biết quá trình xác thực thành công hay thất bại.

has_changed()

Trả về True nếu giá trị của form đã bị thay đổi so với giá trị khởi đầu initial của nó.

data = {
    'subject': 'hello',
    'message': 'Hi there',
    'sender': 'foo@example.com',
    'cc_myself': True
}

form = ContactForm(data, initial=data)

form.has_changed()   # sẽ trả về True

has_error(field, code=None)

Trả về giá trị boolean cho biết trường có lỗi hay không. code là mã lỗi cần kiểm tra.

Để kiểm tra có các lỗi không thuộc về trường nào hay không sử dụng NON_FIELD_ERRORS cho đối số field.

non_field_errors()

Trả về danh sách các lỗi từ thuộc tính errors không thuộc về một trường cụ thể nào.

Các tùy chọn khi khởi tạo

Khởi tạo giá trị ban đầu cho form không ràng buộc

Sử dụng tùy chọn initial của hàm tạo để khai báo giá trị ban đầu cho form không ràng buộc khi khởi tạo.

form = ContactForm(initial={'subject': 'Hi there!'})

Nếu một trường cũng khai báo initial của riêng nó và khi khởi tạo form, intial của hàm tạo form sẽ ghi đè intial của trường cụ thể:

from django import forms

class CommentForm(forms.Form):
    name = forms.CharField(initial='class')
    url = forms.URLField()
    comment = forms.CharField()


form = CommentForm(initial={'name': 'instance'})

auto_id

Nếu đặt là False, các trường render ra HTML sẽ không có thẻ <label> và thuộc tính id.

Nếu đặt là True, các trường render ra HTML sẽ có thẻ <label> và thuộc tính id sinh tự động từ tên trường.

Nếu đặt là một chuỗi chứa kí tự định dạng '%s' thì kí tự định dạng này được thay bằng tên trường khi tạo id.

Giá trị mặc định của auto_id'id_%s' nên id của trường được tạo tự động bằng cách thêm tiền tố id_ vào trước tiên trường.

label_suffix

Cài đặt hậu tộ của nhãn (mặc định là dấu hai chấm :). Nó được tự động thêm vào sau tên nhãn trong thẻ <label>.

Các thuộc tính của trường

auto_id

Trả về auto_id của trường.

data

Trả về dữ liệu của trường.

errors

Trả về danh sách thông báo lỗi của trường.

field

Trả về thực thể của Field

form

Trả về form chứa trường này.

help_text

Trả về help_text của trường.

html_name

Tên được sử dụng cho thuộc tính name của HTML widget của trường.

id_for_label

Sử dụng nó để render ID của trường này trong template.

is_hidden

True nếu trường này là trường ẩn.

label

Nhãn của trường. Được dùng trong label_tag()

name

Tên của trường.

widget_type

Trả về tên CSS class của wrapper chứa widget của trường.

No Comments Yet