我有Django模板,其中有一个CharField
。用户可以在此输入手机号码并提交。
连接到此模板的视图有时会传递给所述模板,这是一个包含预定义电话号码{{ number }}
的上下文变量。
如何使用CharField
自动填充 Django模板中的{{ number }}
?
模板代码如下:
<form action="{% url 'user_phonenumber' slug=unique num=decision %}" method="POST">
{% csrf_token %}
<b style="font-size:90%;color:green;">Enter your mobile number:</b><br><br>
{{ form.mobile_number }}<br><br>
<input type="submit" name="number" value="OK"><br>
</form>
如果需要, forms.py 包含以下内容:
class UserPhoneNumberForm(forms.Form):
mobile_number = forms.CharField(max_length=50)
class Meta:
fields = ("mobile_number")
在 views.py 中,我只想:
class UserPhoneNumberView(FormView):
form_class = UserPhoneNumberForm
template_name = "get_user_phonenumber.html"
def get_context_data(self, **kwargs):
context = super(UserPhoneNumberView, self).get_context_data(**kwargs)
if self.request.user.is_authenticated():
#some code to determine what number should be
context["number"] = number
return context
我查看了一些other SO answers。我链接的最后一个接近解决问题,但解决方案不是动态值(这是我需要的),还有模型形式的解决方案。其余的不能满足我的特殊需求。
答案 0 :(得分:2)
我需要覆盖我的FormView def get_initial(self):
才能实现这一目标。即而不是将上下文变量传递给模板,将变量作为initial
通过get_initial()
传递给相关表单。
我是这样做的:
def get_initial(self):
"""
Returns the initial data to use for forms on this view.
"""
if self.request.user.is_authenticated():
#What's the latest chatpicmessage which houses a pic you own
try:
msg = PicMessage.objects.filter(which_pic__owner=self.request.user).latest('sending_time')
self.initial = {'mobile_number': msg.what_number} #initial needs to be passed a dictionary
return self.initial
except:
return self.initial
else:#i.e user is not authenticated
return self.initial
return self.initial
有关此问题的更多文档可在此处找到:https://docs.djangoproject.com/es/1.9/ref/forms/fields/#initial