이 질문은 다음과 같이 공식화 될 수도 있습니다. "CreateView 생성 폼의 속성을 변경하는 방법"Django의 CreateView에서 양식 필드 사용 안 함
"CreateView"를 사용하여 장고 1.10에서보기 및 관련 양식을 생성하고 있습니다. 일반 사용자 (교사)는 모델의 인스턴스를 본인으로 만 만들 수 있지만 권한있는 사용자는 인스턴스를 만들고 교사에게 할당 할 수 있습니다. 두 가지 모두 동일한보기/양식을 사용하고 싶습니다.
모델 :
class Set(models.Model):
name = models.CharField(
max_length=40,
)
matter = models.ForeignKey(
Matter,
on_delete=models.SET_NULL,
null=True,
)
group = models.ForeignKey(
Group,
on_delete=models.SET_NULL,
null=True,
)
teacher = models.ForeignKey(
Teacher,
on_delete=models.PROTECT,
)
기술적으로, 그것은 현재 로그인 "교사"로 양식을 채우기에 구성하고 현재 사용자가 권한이없는 한 필드를 비활성화합니다. 현재 다음 코드를 사용하여 초기 값 설정을 수행하지만 일반 사용자가 "선생"필드를 수정하지 못하게하는 방법을 모르겠습니다.
class SetCreate(LoginRequiredMixin, CreateView):
model = Set
fields = ('name', 'matter', 'group', 'teacher')
def get_initial(self):
return {'teacher': self.request.user.teacher.id}
# code to limit 'teacher' field editing
해봤 또 다른 옵션은 같은 오른쪽 '교사'로 인스턴스를 생성하는 것입니다 :
class SetCreate(LoginRequiredMixin, CreateView):
model = Set
fields = ('name', 'matter', 'group')
def form_valid(self, form):
form.instance.teacher = self.request.user.teacher
return super(SetCreate, self).form_valid(form)
그것은 좋은 작동하지만 내가 특권에 의해 '교사'필드를 편집하는 데 사용할 수 없습니다 사용자.
필드를 형성하는 'Field.disable'속성이 있다는 것을 알고 있지만 가능한 경우 'CreateView'생성 된 양식의 속성을 변경하는 방법을 알지 못합니다.
또 다른 옵션은 양식의 드롭 다운 목록에있는 옵션을 제한하는 것이지만 방법을 알지 못합니다.
다른 견해를 포함한 조언은 환영합니다.
좋은 보이는
이, 그러나 그것은 단지 편집 양식에 유용하지 만들 것입니다 (겉보기 무의미 다른 블록은 우리가 항상 인스턴스 변수를 설정할 수 있도록하는 것입니다.) : 그래서, 당신이 할 수 형태. 생성 모드에서 일반 사용자는 실제로 '선생님'필드를 정의하지만 자신으로 만 정의 할 수 있습니다. 이상적으로는 양식이 생성 될 때 '선생님'입력란에 '사용 중지됨'속성을 설정하여 해결할 수 있지만이를 수행하기 위해 어떤 방법을 대체 할 것인지 알 수 없습니다. – jjchico
위와 같이 표시된 'form_valid' 코드로 다시 한 번, 권한을 검사하는 if 블록 안에 다시 넣습니다. –