Django模型表单设置外键下拉列表的可能值

2024-05-28 23:36:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个扩展ReviewForm的形式。ReviewForm的模型是Review,它有以下字段:

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

^{pr2}$

我试图在呈现窗体之前将其初始值传递给它。这是我的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,并让表单显示该查询集。然而,Django似乎并不接受。在

我不知道如何编写这个函数。设置profuser的初始值是因为它选择了初始值。我确信获取教授课程的代码:course = prof.course_set.all()工作正常,我已经在shell中测试过了。所以我需要做的是根据queryset输入设置表单的courses的可能值。在


Tags: nameformidreturnmodelsrequestreviewreviews
1条回答
网友
1楼 · 发布于 2024-05-28 23:36:07

感谢@solarismoke的链接!我用的是:

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

相关问题 更多 >

    热门问题