Khi triển khai ModelForm, tôi muốn thực hiện các loại kiểm tra xác thực khác nhau dựa trên việc người dùng hiện tại có phải là superuser hay không. Tôi có thể truy cập người dùng yêu cầu hiện tại bằng cách nào?django: cách truy cập người dùng yêu cầu hiện tại trong ModelForm?
6
A
Trả lời
10
bạn có thể chuyển đối tượng người dùng làm đối số bổ sung trong hàm tạo biểu mẫu.
ví dụ:
f = MyForm(user=request.user)
và các nhà xây dựng sẽ trông giống như:
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user',None)
super(MyForm, self).__init__(*args, **kwargs)
và sau đó sử dụng sử dụng dưới các hình thức clean_XX như bạn muốn
7
Lưu ý: nếu bạn đang sử dụng Lớp Dựa xem (CBVs) sau đó chuyển một đối số thừa vào hàm tạo (ví dụ: trong get_forms_class
) hoặc trong form_class
sẽ không hoạt động, vì <form> object is not callable
sẽ được hiển thị.
Giải pháp cho CBVs là sử dụng get_form_kwargs
, ví dụ:
views.py:
# Sending user object to the form, to verify which fields to display/remove (depending on group)
def get_form_kwargs(self):
kwargs = super(MyView, self).get_form_kwargs()
kwargs.update({'user': self.request.user})
return kwargs
forms.py:
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user') # To get request.user. Do not use kwargs.pop('user', None) due to potential security hole
super(MyForm, self).__init__(*args, **kwargs)
# If the user does not belong to a certain group, remove the field
if not self.user.groups.filter(name__iexact='mygroup').exists():
del self.fields['confidential']
Các vấn đề liên quan
- 1. Django, cập nhật hồ sơ người dùng với ModelForm
- 2. Truy cập yêu cầu của người dùng trong tín hiệu post_save
- 3. Quyền Django-storages nào yêu cầu người dùng IAM s3?
- 4. apache php> yêu cầu người dùng
- 5. Làm thế nào để sử dụng theo yêu cầu trong một ModelForm trong Django
- 6. cách truy cập yêu cầu trong phụ trợ xác thực tùy chỉnh django?
- 7. Truy cập bị từ chối mạo danh thư mục mạng truy cập người dùng hiện tại
- 8. Django Generic View - Truy cập theo yêu cầu
- 9. truy cập các tiêu đề yêu cầu trên django/python
- 10. Cách truy cập luồng của người dùng?
- 11. Cách yêu cầu lại quyền truy cập ảnh trong iOS5?
- 12. Trong Django, có thể truy cập phiên người dùng hiện tại từ trong thẻ tùy chỉnh không?
- 13. Django Admin: Cách truy cập đối tượng yêu cầu trong admin.py, cho phương thức list_display?
- 14. Yêu cầu người dùng bật Wi-Fi
- 15. Django ModelForm
- 16. thuộc tính yêu cầu người dùng đăng nhập thay vì truy cập bị từ chối?
- 17. Truy cập lịch công khai bằng API Google mà không yêu cầu người dùng đăng nhập
- 18. Tại sao các yêu cầu ASP.NET Hiện tại hiệu suất truy cập luôn cao hơn ASP.NET Ứng dụng Yêu cầu/giây truy cập
- 19. Cách truy vấn vai trò của người dùng hiện tại
- 20. Yêu cầu kéo Github đa người dùng
- 21. Tìm hiểu người dùng hiện đang đăng nhập ở Django
- 22. Người dùng hiện tại trong Magento?
- 23. Pocket Truy Cập API Yêu cầu mã
- 24. Làm cách nào để truy cập đối tượng yêu cầu trong plugin Django-CMS?
- 25. RabbitMQ người tiêu dùng theo yêu cầu?
- 26. Truy cập yêu cầu hiện tại ở chế độ Express/Jade
- 27. self.instance trong Django ModelForm
- 28. Truy cập phần thân của yêu cầu PUT hoặc POST
- 29. Chơi 2.0 truy cập để yêu cầu trong các mẫu
- 30. chế độ xem dựa trên lớp django - UpdateView - Cách truy cập người dùng yêu cầu trong khi xử lý biểu mẫu?
Xin lỗi về việc không làm rõ điều này trong câu hỏi ban đầu, nhưng ModelForm của tôi đã được nối với một lớp con ModelAdmin. Làm thế nào tôi có thể gọi constructor tùy chỉnh của ModelForm từ ModelAdmin? – zer0stimulus
để bạn muốn thực hiện điều này trong giao diện quản trị django? Đã không thử điều đó, nhưng tôi đoán bạn có thể thử ghi đè phương thức __call__ của biểu mẫu. ví dụ: http://stackoverflow.com/questions/727928/django-admin-how-to-access-the-request-object-in-admin-py-for-list-display-meth –