Есть модель:
class Stage(models.Model):
task= models.ForeignKey(Task)
stage = models.CharField(u'Етап',max_length=100)
stagetext = models.TextField(u'Текст етапу', max_length=300)
status = models.CharField(verbose_name=u'Статус завдання',max_length=6,choices=STATUS_STAGE_CHOICES)
datestart = models.DateField(u'Дата початку',blank = True)
dateend = models.DateField(u'Дата закінчення',blank = True)
seen = models.BooleanField(u'Ознайомлений',blank = True)
confirm = models.BooleanField(u'Підтверджено',)
answer = models.TextField(u'Звіт',max_length=100,blank = True)
а также ModelForm
class StageFormWork(ModelForm):
class Meta:
model = Stage
exclude = ('task',)
widgets = {
'datestart': TextInput(attrs={'class': 'vDateField','readonly':'readonly'}),
'dateend': TextInput(attrs={'class': 'vDateField','readonly':'readonly'}),
#'datestart': TextInput(attrs={'class': 'vDateField'}),
#'dateend': TextInput(attrs={'class': 'vDateField'}),
}
обрабатывается представлением:
def stage_work(request,stage=None):
id=stage
form = StageFormWork(request.POST or None,instance=id and Stage.objects.get(id=id))
if request.method == 'POST' and form.is_valid():
form.save()
return HttpResponseRedirect('/main/')
return render_to_response('stage_work.html',{'form':form},context_instance=RequestContext(request))
Это единственный способ, который я нашел для запрета редактирование части полей.
Есть два больших минуса:
1. При выводе readonly поля в шаблоне для пользователя неочевидно что поле нильзя редактировать.
2. widgets = {
'datestart': TextInput(attrs={'class': 'vDateField','readonly':'readonly'}),
'dateend': TextInput(attrs={'class': 'vDateField','readonly':'readonly'}),
} - надо перечислять поля и их типы, что при больших формах неудобно.
Пробовал disabled - но тогда поля(переменные) с таким свойством не передаются в request.post.
Кто и как выходит из данной ситуации?!?
P.S. Надо что б нередактируемые поля были видны на форме.
Updated 17 June 2012, 22:34 by dest81.