2010-03-25 33 views
5

Trong một ModelForm, tôi phải kiểm tra phép người sử dụng để cho họ điền vào các lĩnh vực phải:Loại bỏ một lĩnh vực từ một ModelForm động

Nó được định nghĩa như thế này:

class TitleForm(ModelForm):  
    def __init__(self, user, *args, **kwargs): 
     super(TitleForm,self).__init__(*args, **kwargs)    
     choices = ['','----------------'] 
     # company 
     if user.has_perm("myapp.perm_company"): 
      self.fields['company'] = forms.ModelChoiceField(widget=forms.HiddenInput(), 
       queryset=Company.objects.all(), required=False) 
      choices.append(1,'Company') 
     # association 
     if user.has_perm("myapp.perm_association") 
      self.fields['association'] = 
      forms.ModelChoiceField(widget=forms.HiddenInput(), 
       queryset=Association.objects.all(), required=False) 
      choices.append(2,'Association') 
     # choices 
     self.fields['type_resource'] = forms.ChoiceField(choices = choices) 

    class Meta: 
     Model = Title 

ModelForm này làm công việc : tôi ẩn từng trường trên mẫu và làm cho chúng xuất hiện nhờ javascript ...
Vấn đề là ModelForm này là mỗi trường được xác định trong mô hình sẽ được hiển thị trên mẫu.
Tôi muốn xóa chúng khỏi biểu mẫu nếu chúng không cần thiết:
ví dụ: nếu người dùng không có quyền trên công ty mô hình, nó sẽ không được sử dụng trong biểu mẫu được hiển thị trong mẫu.

Vấn đề đó là bạn cần phải đặt danh sách các lĩnh vực trong lớp Meta dạng với lĩnh vực hoặc loại trừ thuộc tính, nhưng tôi không biết làm thế nào để quản lý chúng tự động.

Bất kỳ ý tưởng nào ??
Cảm ơn trước vì bất kỳ câu trả lời nào.

Trả lời

9

Chỉ cần xóa nó khỏi self.fields dict:

if not user.has_perm("blablabla"): 
    del self.fields["company"] 
+0

Vâng, đó là rõ ràng !!!! Chỉ cần phải xác định tất cả các trường trong lớp Meta và sau đó loại bỏ nếu không hữu ích ... Cảm ơn rất nhiều! –

+4

điều này sẽ không hoạt động nếu bạn đã xác định fieldset trên ví dụ trong ModelAdmin. –

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