动态创建字段的帮助文本

时间:2019-03-08 08:02:06

标签: django django-forms

我有我的回复表,并以此视图查看

class ResponseForm(ModelForm):
    class Meta:
        model = ResponseModel
        exclude = ('author', 'title','submit_count')
        # help_texts = {
        #     'ans1': user.q1.value,
        # }

@login_required
def ResponseFormView(request):
    if request.method == "POST":
        form = ResponseForm(request.POST)
        if form.is_valid():
            submission = form.save(commit=False)
            submission.author = request.user
            submission.save()
            return render(request, 'thanks.html', {})
    else:
        form = ResponseForm()
        return render(request, 'response_tem.html', {'form': form})

我希望'ans1'字段的帮助文本为request.user的q1字段的值。我该怎么办?

1 个答案:

答案 0 :(得分:1)

您可以这样做:

class ResponseForm(ModelForm):
    def __init__(self, *args, **kwargs):
         user = kwargs.pop('user', None)  # popping user from known arguments
         super(ResponseForm, self).__init__(*args, **kwargs) 
         if user:
              self.fields['ans1'].help_text = "Help Text for {}".format(user.username)

    class Meta:
        model = ResponseModel
        exclude = ('author', 'title','submit_count')

@login_required
def ResponseFormView(request):
    if request.method == "POST":
        form = ResponseForm(request.POST)
        if form.is_valid():
            submission = form.save(commit=False)
            submission.author = request.user
            submission.save()
            return render(request, 'thanks.html', {})
    else:
        form = ResponseForm(user=request.user)  # passing user as known argument
        return render(request, 'response_tem.html', {'form': form})

在这里,在视图中,我在初始化Form Class的Object(带有注释)时将request.user作为已知参数传递。然后在表单中,我捕获了从视图发送的user并更新了该字段的帮助文本。