2009-01-09 31 views
5

Tôi muốn trường khóa chính không hiển thị trong trang chỉnh sửa của mình. Nếu tôi làm cho nó một AutoField, nó không được hiển thị dưới dạng HTML. Nhưng sau đó giá trị khóa chính không có trong dữ liệu POST của tôi. Có cách nào đơn giản để render AutoField như một trường ẩn?Cách ẩn trường khóa chính ở dạng Django

Trả lời

6

bạn có thể chỉ định nó widget như một lĩnh vực ẩn

9

Nếu bạn không có ý định sử dụng của bạn để có thể thay đổi một cái gì đó trên một hình thức, sau đó bạn thay vì phải đặt nó trong URL hoặc một số bối cảnh khác. Bạn đang mở cho mình các vấn đề bảo mật (hoặc ít nhất là trường hợp sử dụng thêm) nếu không.

Trong urls.py:

(r'^edit/?P<my_id>[\d]+)/$', views.edit), 

và trong view.py:

from django.shortcuts import render_to_response, get_object_or_404 
from models import MyModel 

def edit(request, my_id): 
    obj = get_object_or_404(MyModel, id=my_id) 
    if request.POST: 
     form = MyForm(request.POST, instance=obj) 
     if form.is_valid(): 
      form.save() 
      # 
      # do other stuff.... 
      # 
    else: 
     form = MyForm(instance=obj) 

    return render_to_response(template_name, { 
     "form": form 
    }, context_instance=RequestContext(request)) 
+0

Tôi thích những gì bạn đã làm ở đây. Bạn có suy nghĩ về cách ẩn nhiều trường trong biểu mẫu HTML được hiển thị không? Tôi có cảm giác tôi cần chuyển sang sử dụng các biểu mẫu (hoặc ngừng sử dụng ModelForms) để có được mức độ chi tiết mà tôi muốn:/ – neoice

+0

Vâng, nếu tất cả đều là giá trị mà người dùng không thể thay đổi, họ cũng có thể truy cập url: '(r '^ chỉnh sửa /? P [\ d] +) /? P [.] +/$', views.edit)'. Nếu không, trong ModelForms đặt widget của mỗi trường thành HiddenInput (hoặc đặt kiểu hiển thị của widget hiện tại thành 'none'.) –

+0

Bạn sẽ làm gì nếu biểu mẫu đang tạo ra cá thể của mô hình? –

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