2017-12-03 171 views
0

我有一個表格ReviewForm,它擴展ModelFormReviewForm的模型是Review,它具有以下字段:Django模型表單設置了外鍵下拉的可能值

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'] 

我試圖渲染它之前的初始值傳遞到表單。這是我對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}) 

profuser成功設置的初始值的代碼。我試圖傳入profcourses,並以表單顯示queryset。但是,Django似乎並不接受它。

我不知道如何編碼此功能。設置profuser的初始值可以工作,因爲它選擇初始值。我確信獲得教授課程的代碼:course = prof.course_set.all()正常工作,我已經在shell中測試過它。所以我需要做的是根據queryset輸入設置表格的課程的值可能的值。

+0

喲意思是「Django似乎不接受它」。您是否期望被渲染爲下拉菜單但它不是? –

回答

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