나는 "시험용 등급"응용 프로그램을 작성하고 있습니다. models.py 파일은 아래와 같습니다.장고의 필수 읽기 전용 필드
class Student(models.Model):
name = models.CharField(max_length=50)
parent = models.CharField(max_length=50)
def __unicode__(self):
return self.name
class Grade(models.Model):
studentId = models.ForeignKey(Student)
finalGrade = models.CharField(max_length=3)
난 그냥 한 번에 한 학생이 노력하고 있어요 modelformset 여러 학생들하지만 지금은 최종 성적을 변경할 수 있도록하고 싶습니다
. 또한 변경할 수없는 필드로 학생 이름을 표시하는 양식을 만들려고합니다. 여기서 변경할 수있는 것은 finalGrade뿐입니다. 그래서이 트릭을 사용하여 studentId를 읽기 전용으로 설정했습니다.
class GradeROForm(ModelForm):
studentId = forms.ModelChoiceField(queryset=Student.objects.all())
def __init__(self, *args, **kwargs):
super(GradeROForm,self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.id:
self.fields['studentId'].widget.attrs['disabled']='disabled'
def clean_studentId(self):
instance = getattr(self,'instance',None)
if instance:
return instance.studentId
else:
return self.cleaned_data.get('studentId',None)
class Meta:
model=Grade
그리고 여기 내이다 : 나는 기대처럼이 양식을 표시
def modifyGrade(request,student):
student = Student.objects.get(name=student)
mygrade = Grade.objects.get(studentId=student)
if request.method == "POST":
myform = GradeROForm(data=request.POST, instance=mygrade)
if myform.is_valid():
grade = myform.save()
info = "successfully updated %s" % grade.studentId
else:
myform=GradeROForm(instance=mygrade)
return render_to_response('grades/modifyGrade.html',locals())
,하지만 난 쳤을 때 나는 날이 필드가됩니다 말하는 학생 필드에 대한 양식 유효성 검사 오류가 "제출" 필수. 나는 그 필드가 "disabled"이기 때문에 값이 POST에서보고되지 않는다고 추측하고있다. 그리고 나에게 알려지지 않은 이유로 그 인스턴스가 그 자리에서 사용되지 않는다.
저는 새로운 Django/Python 프로그래머이지만 다른 언어로도 매우 경험이 있습니다. 내 첫 번째 중요한 django app에서 문제를 해결하기가 어려웠다는 것을 나는 믿을 수 없다. 나는 뭔가를 놓친 것 같아요. 어떤 아이디어?
self.fields['studentId'].widget.attrs['readonly'] = True
을하고도 다시 게시에 값을 덮어 쓰지 확인하십시오
가에 대한 답변에서보세요 [ "장고 형태에서, 어떻게 필드를 읽기 전용으로 만들기 위해 : 여전히 필수 필드에 문제가있는 경우
또한, 당신은 당신의 modelform에서 다음을 수행 할 수 있습니다 (또는 비활성화 됨) 편집 할 수 없습니까? "(http://stackoverflow.com/questions/324477/in-a-django-form-how-to-make-a-field-readonly-or-disabled- 그렇게 될 수는 없습니다) 저는 여러분이 문제를 해결할 수 있다고 생각합니다. –
감사합니다. 나는 전에 그것을 보았고 제대로 작동하지 못했습니다. 최종 허들 인 것처럼 보이는 "required = False"를 추가하는 것에 대해서는 아래의 내 의견을 참조하십시오. – jamida