2012-09-26 19 views
5

Tôi có một hình thức tùy chỉnh mà tạo ra một đầu vào ẩn của một lĩnh vực:Làm cách nào để ẩn nhãn django ở dạng django tùy chỉnh?

class MPForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MPForm, self).__init__(*args, **kwargs) 
     self.fields['mp_e'].label = "" #the trick :) 

class Meta: 
    model = MeasurementPoint 
    widgets = { 'mp_e': forms.HiddenInput() } 
    exclude = ('mp_order') 

tôi phải làm thủ thuật này ít để "che giấu" nhãn, nhưng những gì tôi muốn làm là loại bỏ nó từ biểu mẫu. Tôi tạo biểu mẫu như sau:

forms.MPForm() 
+2

Là một sang một bên, đừng quên dấu phẩy sau trong bộ lọc 'loại trừ' của bạn. Nó phải là 'exclude = ('mp_order',)' – Alasdair

Trả lời

14

Tôi không khuyên bạn nên xóa nhãn vì biểu mẫu không thể truy cập được. Bạn có thể add a custom CSS class cho trường này và trong CSS make that class invisible của mình.

EDIT

tôi bị mất rằng đầu vào đã được ẩn nên khả năng tiếp cận không phải là một mối quan tâm.

Bạn có thể làm cho các trường mẫu trực tiếp trong mẫu của bạn:

<form ...> 
    {% for field in form.hidden_fields %} 
     {{ field }} 
    {% endfor %} 

    {% for field in form.visible_fields %} 
     {{ field.label }} {{ field }} 
    {% endfor %} 
</form> 
+0

Nó chỉ là một điều khiển ẩn đầu vào, tôi không cần nhãn, tôi đang sử dụng đầu vào này ẩn như một mã thông báo. – Harchet

+0

Được rồi, tôi đã bỏ lỡ trường đó là một trường ẩn. Xin lỗi, tôi sẽ chỉnh sửa câu trả lời ở trên. –

+0

Tôi nghĩ rằng đây là cách tốt nhất để làm điều đó, nhưng họ nên thực hiện một cách xóa nhãn dưới dạng ... Cảm ơn! – Harchet

0

Trừ khi tôi là sự hiểu lầm câu hỏi của bạn, bạn chỉ cần thêm các lĩnh vực mp_e đến loại trừ tuple dưới lớp meta. đây không phải là những gì bạn cần?

class MPForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MPForm, self).__init__(*args, **kwargs) 

    class Meta: 
     model = MeasurementPoint 
     exclude = ('mp_order','mp_e') 
+0

Không, tôi cần đầu vào bị ẩn, những gì tôi không cần là nhãn ở phía trước. – Harchet

+0

trong trường hợp đó thì câu trả lời của Alasdair là chính xác. – joeButler

5

Nếu bạn sử dụng form.as_p hoặc form.as_table phương pháp, Django không nên hiển thị các nhãn cho các trường ẩn của bạn dù sao, nên không cần phải thay đổi nhãn trong phương pháp __init__ của bạn.

{{ form.as_table }} 

Nếu bạn là customizing the form template, bạn có thể sử dụng thuộc tính field.is_hidden để kiểm tra xem lĩnh vực này là ẩn.

{% if field.is_hidden %} 
    {# Don't render label #} 
{% endif %} 

Hoặc, bạn có thể loop over hidden and visible fields separately và bỏ qua nhãn cho các trường bị ẩn.

+0

Điều này là tôi muốn sử dụng biểu mẫu mà không có bất kỳ tùy chỉnh nào, chỉ cần thay đổi điều trong form.py, nhưng có vẻ như không thể làm điều đó – Harchet

+0

Như tôi đã nói ở trên, ** Django sẽ không hiển thị nhãn cho ẩn theo mặc định **. Bạn không cần phải thay đổi nhãn trong phương thức '__init__' của bạn. Nếu nhãn đang được hiển thị, thì bạn đang làm điều gì đó trong chế độ xem hoặc mẫu mà bạn chưa đưa vào câu hỏi của mình. – Alasdair

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