У меня есть форма, которую мне нужно показать за пределами области администрирования, некоторые поля не могут быть отредактированы, но могут их видеть.Как использовать «Readonly Field» вне Admin
Чтобы сделать это было бы здорово «AdminReadonlyField» найдено в «django.contrib.admin.helpers» Проблема заключается в том, что вы не можете сделать.
Я пытался создать какой-то виджет, который может заменить этот сложный класс, но я не могу заставить его правильно работать с полями DateTiemField.
class UserUpdateForm(forms.ModelForm):
"""
We need field "date_joined" can not be edited but can see them
"""
class Meta:
model = User
fields = ('first_name', 'last_name',
'email', 'date_joined', 'slug')
def __init__(self, user, *args, **kwargs):
kwargs['instance'] = user
super(UserUpdateForm, self).__init__(*args, **kwargs)
self.fields['date_joined'].widget = widgets.CMDateTimeText()
def clean_date_joined(self):
instance = getattr(self, 'instance', None)
if instance and instance.pk:
return instance.date_joined
else:
return self.cleaned_data['date_joined']
Мой код, что-то не так.
class CMDateTimeText(DateTimeBaseInput):
"""
A SplitDateTime Widget that has some admin-specific styling.
Hereda Field and Widget.
"""
format_key = 'DATETIME_FORMAT'
def __init__(self, attrs=None, format=None):
# Use slightly better defaults than HTML's 20x2 box
default_attrs = {'class': 'date_id'}
if attrs:
default_attrs.update(attrs)
super(CMDateTimeText, self).__init__(attrs=default_attrs, format=format)
def render(self, name, value, attrs=None):
if value is None:
value = ''
value = self._format_value(value)
final_attrs = self.build_attrs(attrs, name=name)
return format_html('<p{}>{}</p>', flatatt(final_attrs), conditional_escape(value))
изображение Результат:
любая идея, как сделать «AdminReadonlyField»»любой вид или форму
Возможный дубликат [В форме django, Как сделать поле readonly (или отключено), чтобы его нельзя было отредактировать?] (Http://stackoverflow.com/questions/324477/in-a-django-form -how-to-make-a-field-readonly-or-disabled-so-that-it-can not-b) – rnevius
Пожалуйста, @rnevius проверить, что мой вопрос не дублируется. – Colpaisa