Может быть, вы можете попробовать вот так, переопределив OrderForm
:
class OrderForm(ModelForm):
def __init__(self, *args, **kwargs):
<b>user = kwargs.pop('user', None)</b>
super(OrderForm, self).__init__(*args, **kwargs)
<b>if not user.is_superuser: # or do admin check
self.fields['status_choices'].widget.attrs['readonly'] = True</b>
class Meta:
model = Order
fields = '__all__'
exclude = ['user','date']
Затем передать пользовательский экземпляр через OrderForm
при его запуске в представлении:
form = OrderForm(request.POST or None, request.FILES or None,initial=initial_date, <b>user=user</b>)
Обновление
Это может не работать для исходных данных, потому что у него есть выбор, которого нет в choices
в поле модели модели Order
. Измените его на:
initial_date = {
'status':"Processing/Manufacturing"
}
Вы также можете добавить его как значение по умолчанию в поле модели:
status = models.CharField(max_length = 100, choices = status_choices, default="Processing/Manufacturing")
Если вы вообще не хотите отображать в поле, тогда вы можете скрыть его с помощью:
<b>if not user.is_superuser: # or do admin check
self.fields['status_choices'].widget.attrs['hidden'] = True</b>
или просто удалить:
<b>if not user.is_superuser: # or do admin check
self.fields.pop('status_choices')</b>