Skip to content

Instantly share code, notes, and snippets.

@nck2
Created August 2, 2017 13:13
Show Gist options
  • Save nck2/1cd5987410853c88f4b2cd43c0a34414 to your computer and use it in GitHub Desktop.
Save nck2/1cd5987410853c88f4b2cd43c0a34414 to your computer and use it in GitHub Desktop.
RecursionError
# 아래 13번째줄을 없애면 AsPre의 모델에 student 항목이 빈채로 저장
# 하지만 13번째줄을 넣으면 첨부한 사진과 같은 오류 발생.
# AsPre의 모델에 student 항목을 현재 request의 유저로 저장하기 위해서는 views를 어떻게 해야 하나요?
# views.py
def preas_detail(request,pk):
'''평가항목보이기'''
if request.method=="POST":
form = AsPreModelForm(request.POST,addr=request.user.profile.address)
if form.is_valid():
forme=form.save(commit=False)
forme.student=request.user #--------------> 여기가 문제인듯.
forme.check=True
forme.save()
form.save_m2m()
return redirect('presentation:presentation_list')
else:
form=AsPreModelForm(addr=request.user.profile.address)
return render(request,'presentation/preas_detail.html',{'form':form})
# models.py
class GroupPre(models.Model):
'''학생 발표자료'''
title = models.CharField(max_length=50,verbose_name="발표제목")
created_at=models.DateTimeField(auto_now_add=True)
filedata = models.FileField(verbose_name="파일",upload_to="file_for_presentation/%Y/%m/%d")
ban = models.CharField(max_length=5,verbose_name="분반",choices=[('1','1반'),('2','2반')])
author = models.ManyToManyField(Profile,verbose_name="발표자",help_text="발표조에 해당하는 학생을 모두 체크하세요.")
predate= models.DateTimeField(verbose_name="발표일자",blank=True,null=True)
def __str__(self):
return self.title
class AsPre(models.Model):
'''학생평가자료'''
student=models.ManyToManyField(settings.AUTH_USER_MODEL,verbose_name="평가하는 사람")
pre = models.ManyToManyField(GroupPre,verbose_name="발표자료")
# ban = models.CharField(max_length=5,verbose_name="분반",choices=[('1','1반'),('2','2반')],default="1")
check= models.BooleanField(default=False,verbose_name="평가여부")
answer_choice = (
("1", "매우그렇다"),
("2", "그렇다"),
("3", "보통이다"),
("4", "그렇지않다"),
("5", "매우그렇지않다"),
)
question1=models.CharField(max_length=5,verbose_name="1번문항",choices=answer_choice,help_text="발표를 위해 많은 준비와 노력을 한 것 같다.")
question2=models.CharField(max_length=5,verbose_name="2번문항",choices=answer_choice,help_text="발표 내용이 학습에 도움이 되었다.")
question3=models.CharField(max_length=5,verbose_name="3번문항",choices=answer_choice,help_text="발표자가 발표를 자연스럽게 잘 하였다.")
question4=models.CharField(max_length=5,verbose_name="4번문항",choices=answer_choice,help_text="발표자료 및 내용이 듣는 사람이 잘 이해할 수 있도록 구성되었다.")
answer=models.TextField(verbose_name="과제 발표내용에 대한 의견",blank=True)
class_date=models.DateTimeField(auto_now_add=True,verbose_name="평가한 날짜")
def __str__(self):
return str(self.pre)
# forms.py
class GroupPreModelForm(forms.ModelForm):
class Meta:
model = GroupPre
fields='__all__'
widgets={
# 'predate':forms.SelectDateWidget
'author':forms.CheckboxSelectMultiple,
}
def __init__(self,*args,addr=1,**kwargs): # 외래키를 폼에서 제한적으로 나타내는 코드
self.addr=addr # views 에서 로그인한 학생의 반에 해당하는 분반의 프로필만 보여줌.
super(GroupPreModelForm,self).__init__(*args,**kwargs)
self.fields['author'].queryset=Profile.objects.filter(address=self.addr).order_by('class_number') #views에서 addr로 받은 분반에 해당하는 학생의 프로필만 보여줌.
class AsPreModelForm(forms.ModelForm):
class Meta:
model = AsPre
fields=['pre','question1','question2','question3','question4','answer']
def __init__(self,*args,addr,**kwargs):
self.addr=addr # views 에서 로그인한 학생의 반에 해당하는 분반의 프로필만 보여줌.
super(AsPreModelForm,self).__init__(*args,**kwargs)
self.fields['pre'].queryset=GroupPre.objects.filter(ban=self.addr).order_by('-predate') #views에서 addr로 받은 분반에 해당하는 발표자료만 보여줌
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment