我知道如何使用帮助程序设置字段
readonly
,但我想禁用特定用户的值更改。
我发现的唯一方法是在表单中添加一个条件,考虑到 user.is_staf
或 user.is_superuser
。
views.py中的表单调用
s_form = stock_inline_formset(
instance=product, form_kwargs={'empty_sst': empty_sst, 'user_is_staff':
user.is_staff})
forms.py中的条件
class SstStockForm(forms.ModelForm):
class Meta:
model = SstStock
fields = ('qty', 'warehouse', 'maxsst', 'adresse', 'pua', 'cau')
def __init__(self, *args, **kwargs):
self.empty_sst = kwargs.pop('empty_sst', None)
self.user_is_staff = kwargs.pop('user_is_staff', None)
super().__init__(*args, **kwargs)
if not self.user_is_staff:
self.fields['qty'].widget.attrs = {'readonly': 'readonly'}
self.fields['pua'].widget.attrs = {'readonly': 'readonly'}
self.fields['cau'].widget.attrs = {'readonly': 'readonly'}
[...]
这是更好的方法吗? 否则,我可以使用基于
user
的相同条件使用 JS 来设置输入字段 readonly
。
我没有找到任何讨论此问题的资源。
如果这有效,但您希望将一组不同的用户设置为只读,为什么不直接通过
make_readonly = # boolean derived from user
form_kwargs={'empty_sst': empty_sst, 'user_is_staff': make_readonly }
其中 make_readonly 是通过询问
request.user
或从用户详细信息派生的任何其他信息在您的视图中生成的布尔值。
如果您想对表单集中的不同表单采取不同的操作,请传递
request.user
本身而不是从它派生的布尔值,并且每个表单都可以自行决定是否只读。