我想自动填充模型的一个字段。它拥有客户端IP。
我已经按如下方式定义了CreateView:
class MyView(CreateView):
def post(self, request, *args, **kwargs):
self.form_class.client_ip = request.META.get('REMOTE_ADDR')
super(MyView, self).post(request, *args, **kwargs)
model = MyModel
form_class = MyForm
以这种方式和MyForm:
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
exclude = ('ip',)
我不知道如何填补这个被排除在外的领域。
答案 0 :(得分:1)
在MyView
中,您应该添加一个名为get_initial
的方法,该方法返回表单的初始值(作为字典)。例如:
def get_initial(self):
return { 'ip': ... }
然后在创建表单时使用这些初始值。
答案 1 :(得分:0)
排除的字段必须手动填写。您可以查看可添加到request.POST
dict的中间件处理器,您可以覆盖__init__
上的MyForm
,[首次调用super],然后设置模型的{{1} }字段。
中间件处理器还可以向ip
添加一些其他请求级别属性,使其可供将来使用。