2012-07-03 32 views
5

Tôi đang sử dụng factoryformset factory để tạo tập mẫu từ các trường mô hình. Ở đây tôi muốn chỉ làm cho các đối tượng queryset là chỉ đọc và các dạng khác (dạng bổ sung) là các trường không chỉ đọcCác trường chỉ đọc ở dạng thức django

Làm thế nào tôi có thể đạt được điều này?

AuthotFormSet = modelformset_factory(Author, extra=2,) 
    formset = AuthorFormSet(queryset=Author.objects.all()) 

Ở trên formset tôi muốn hiển thị tất cả các đối tượng queryset là chỉ đọc và các dạng bổ sung còn lại là các trường không chỉ đọc. Làm thế nào tôi có thể đạt được điều này?

nếu tôi sử dụng,

 for form in formset.forms: 
      form.fields['weight'].widget.attrs['readonly'] = True 

này sẽ chuyển đổi tất cả các hình thức (bao gồm cả phụ) lĩnh vực để chỉ đọc mà tôi không muốn. Và tôi cũng đang sử dụng plugin jquery để thêm biểu mẫu động vào formset

Trả lời

7

tôi khuyên bạn nên xác định một hình thức để sử dụng cho các mô hình, và trong hình thức mà bạn có thể đặt bất cứ điều gì thuộc tính bạn muốn chỉ đọc.

#forms.py 
class AuthorForm(forms.ModelForm): 
    class Meta: 
     model = Author 

    def __init__(self, *args, **kwargs): 
     super(AuthorForm, self).__init__(*args, **kwargs) 
     if self.instance.id: 
      self.fields['weight'].widget.attrs['readonly'] = True 

#views.py 
AuthorFormSet = modelformset_factory(Author, extra=2, form=AuthorForm) 
+0

Câu hỏi của tôi là cách tôi chỉ có thể tạo biểu mẫu truy vấn thành chỉ đọc không phải biểu mẫu bổ sung. Giải pháp của bạn sẽ chuyển đổi tất cả các trường biểu mẫu dưới dạng chỉ đọc bao gồm cả các trường bổ sung. Ở đây làm thế nào tôi có thể làm cho các lĩnh vực hình thức thêm là không chỉ đọc và khác nên được chỉ đọc – Asif

+0

kiểm tra các tuyên bố nếu trong câu trả lời edited của tôi. Tôi không chắc chắn nếu đó là cách sạch nhất để kiểm tra nếu hình thức có một thể hiện liên kết với nó, nhưng nó làm việc trong thử nghiệm của tôi. –

+0

Cảm ơn bạn rất nhiều giải quyết vấn đề của tôi – Asif

1

Tôi đã sử dụng python long back. Hy vọng this helps. Nhưng nếu bạn muốn kiểm soát lĩnh vực hiển thị bằng jquery

$('.class').attr('readonly', true); 

hoặc

$('#id').attr('readonly', true); 
Các vấn đề liên quan