2017-12-03 2 views
0

ModelForm까지 확장되는 ReviewForm 양식이 있습니다. ReviewForm의 모델은 필드가있는 Review입니다 :Django Model Forms 외래 키 드롭 다운의 가능한 값을 설정하십시오.

class Review(models.Model): 
    message = models.TextField(max_length = 4000) 
    created_at = models.DateTimeField(auto_now_add = True) 
    updated_at = models.DateTimeField(null = True) 
    rating = models.IntegerField(
     default = 5, 
     validators = [MaxValueValidator(5), MinValueValidator(0)] 
    ) 
    prof = models.ForeignKey(Prof, related_name = 'reviews') 
    course = models.ForeignKey(Course, related_name = 'reviews') 
    user = models.ForeignKey(User, related_name = 'reviews') 

forms.py

class ReviewForm(ModelForm): 
    rating = CharField(widget=TextInput(attrs={'type': 'number','value': 5, 'min': 0, 'max': 5})) 

    class Meta: 
     model = Review 
     fields = ['message', 'rating', 'prof', 'course', 'user'] 

내가 그것을 렌더링하기 전에 폼에 초기 값을 전달하기 위해 노력하고있어하십시오. 여기 profuser이 성공적으로 설정의 views.py

def review(request, prof_id=None): 
    """ Review a prof """ 
    # If there's an input prof, return review page for that prof 
    if prof_id: 
     user = User.objects.get(pk=request.user.id) 
     prof = prof_views.prof(prof_id) 
     course = prof.course_set.all() 
     data = {'user': user, 'prof': prof, 'course': course} 
     review_form = ReviewForm(initial=data) 

     return render(request, 'reviews/review_form.html', {'review_form': review_form}) 
    review_form = ReviewForm() 
    return render(request, 'reviews/review_form.html', {'review_form': review_form}) 

초기 값에 대한 내 코드입니다. courses (prof)을 전달하려고하며 해당 쿼리가 해당 쿼리를 표시하도록합니다. 그러나 장고는 그것을 받아들이지 않는 것 같습니다.

이 기능을 코딩하는 방법을 잘 모르겠습니다. profuser의 초기 값 설정은 초기 값을 선택하기 때문에 가능합니다. 교수님 과정을 수강하는 코드가 있으니 : course = prof.course_set.all() 제대로 작동합니다. 쉘에서 테스트했습니다. 그래서 내가해야 할 일은 의 queryset 입력을 기반으로 양식의 코스 값을 설정하는 것입니다.

+0

"장고가 받아들이지 않는 것"은 무엇을 의미 하는가? 드롭 다운으로 렌더링 될 것으로 예상 되나? –

답변

0

@solarissmoke 링크에 감사드립니다. 나는 다음과 같이 수정했다 :

def review(request, prof_id=None): 
    """ Review a prof """ 
    # If there's an input prof, return review page for that prof 
    if prof_id: 
     user = User.objects.get(pk=request.user.id) 
     prof = prof_views.prof(prof_id) 
     course = prof.course_set.all() 
     data = {'user': user, 'prof': prof} 
     review_form = ReviewForm(initial=data) 
     review_form.fields['course'].queryset = course # Added this line