dpw*_*ell 6 forms django class-based-views
我已经看到很多关于如何在不使用基于类的视图时解决这个问题的答案.是否有一些非常明显的事情我错过了用CBV做的事情?
基本上我想在我的表单中有一个MultipleChoiceField,它的选择取决于视图中发生的事情.例如,我使用URL中的PK来执行一些后端请求,然后应该使用这些请求来填充选项.
# forms.py
from django.forms import Form, MultipleChoiceField, CharField
class EmailForm(Form):
users = MultipleChoiceField(required=False)
subject = CharField(max_length=100)
message = CharField()
def __init__(self, users=None, *args, **kwargs):
super(EmailForm, self).__init__(*args, **kwargs)
if users:
self.fields['users'].choices = users
#urls.py
from django.conf.urls import url, patterns
from .views import EmailView
# url patterns
urlpatterns = patterns('',
url( r'^(?P<pk>\d+)$', EmailView.as_view(), name="maindex" ),
)
#views.py
from django.views.generic import FormView, TemplateView
from .forms import EmailForm
class EmailView(FormView):
template_name = 'myapp/email.html'
form_class = EmailForm
success_ulr = '/thanks/'
def form_valid(self, form):
# Do stuff here
return super(EmailView, self).form_valid(form)
Run Code Online (Sandbox Code Playgroud)
基本上它归结为从视图中调用init函数的方式/位置.我怎么做?还是有另外一种我错过的方式?我想get_form_kwargs在视图中覆盖,但无法做到这一点.
谢谢
cli*_*ime 15
风景:
from django.views.generic import FormView
class EmailView(FormView):
# ...
def get_form_kwargs(self):
kwargs = super(EmailView, self).get_form_kwargs()
# get users, note: you can access request using: self.request
kwargs['users'] = users
return kwargs
Run Code Online (Sandbox Code Playgroud)
表格:
from django import forms import Form
class EmailForm(Form):
users = MultipleChoiceField(required=False)
# ...
def __init__(self, *args, **kwargs):
self.users = kwargs.pop('users', None)
super(EmailForm, self).__init__(*args, **kwargs)
self.fields['users'].choices = self.users
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4511 次 |
| 最近记录: |