2011-10-27 30 views
8

Tôi hiểu rằng, theo mặc định, Django tự động điền id cho từng trường biểu mẫu khi hiển thị với định dạng id_for_%s. Người ta có thể sửa đổi định dạng bằng cách cung cấp đối số auto_id với định dạng khác làm giá trị của nó cho hàm tạo Biểu mẫu.Django: Thay đổi id DOM ở cấp trường mẫu

Đó không phải chính xác những gì tôi đang tìm kiếm. Những gì tôi muốn thực hiện là thay đổi id của một trong nhiều trường trong biểu mẫu của tôi. Ngoài ra, giải pháp không nên phá vỡ việc sử dụng form = MyForm(request.POST).

PS. MyForm là một dạng mẫu, vì vậy mỗi id được lấy từ trường Model tương ứng của nó.

Cảm ơn bạn đã trợ giúp.

+0

bạn có thể nhận được ngay với sử dụng một lớp học? Điều đó chắc chắn là dễ dàng hơn và ít bị lỗi hơn (chỉ cần phải sửa đổi các widget). – sdolan

+0

@sdolan - Tôi quên đề cập đến câu hỏi này là về dạng mẫu. Tôi đang tìm kiếm các giải pháp khác ngoài việc thay đổi tên trường mô hình. – tamakisquare

+0

Bạn sẽ không phải làm như vậy. Nó sẽ chỉ cập nhật widget của trường khi bạn xây dựng 'ModelForm'. Nếu điều này sẽ làm việc, tôi sẽ đăng một giải pháp đầy đủ như một câu trả lời. – sdolan

Trả lời

15

Khung hình thức xuất hiện để tạo nhãn ở đây:

def _id_for_label(self): 
    """ 
    Wrapper around the field widget's `id_for_label` class method. 
    Useful, for example, for focusing on this field regardless of whether 
    it has a single widget or a MutiWidget. 
    """ 
    widget = self.field.widget 
    id_ = widget.attrs.get('id') or self.auto_id 
    return widget.id_for_label(id_) 
id_for_label = property(_id_for_label) 

Có nghĩa là bạn chỉ có thể cung cấp phụ tùng lĩnh vực của bạn với một "id" chìa khóa để đặt nó vào bất cứ điều gì bạn muốn.

foo = forms.CharField(widget=forms.TextInput(attrs={'id': 'foobar'})) 

Hoặc ghi đè init và đặt attrs sau khi khởi tạo biểu mẫu.

Tôi không thấy thế nào điều này có thể phá vỡ một hình thức như khuôn khổ hình thức django là không bao giờ nhận thức id HTML (dữ liệu không được truyền đến máy chủ ...)

+2

Yuji - Bạn nói đúng. Thay đổi _id_ không phá vỡ khuôn khổ biểu mẫu của django. Tôi đã nhận được các thuộc tính html _name_ và _id_ trộn lẫn. Đó là thuộc tính _name_ mà Django dựa vào việc ánh xạ một biểu mẫu trở lại một cá thể của mô hình. Cảm ơn câu trả lời. – tamakisquare

Các vấn đề liên quan