我在django1.5应用程序中有一组相关模型:Events
,它们有{
我正在努力为一个面向用户的注册表单创建一个基于类的通用视图,在该表单中,用户注册以参加EventSession
。具体地说,问题在于排除注册所针对的字段{
我将首先通过一个用例来解释:
'/events/foo/bar'
,其中foo
是Event
,而{EventSession
,指向'/events/foo/bar/register/'
。显示EventSessionRegistration
模型的表单,但是没有在UI中选择EventSession
,因为该信息已经由URL“设置”。在为了实现这一点,我有以下视图代码(许多其他导入除外):
from django.views.generic.edit import CreateView
class RegistrationCreate(CreateView):
form_class = SessionRegistrationForm
success_url = '/thanks/'
template_name = 'events/registration_create.html'
def get_context_data(self, *args, **kwargs):
"""Set the context of which Event, and which EventSession.
Return 404 if either Event or EventSession is not public."""
context = super(RegistrationCreate, self).get_context_data(**kwargs)
s = get_object_or_404(
EventSession,
event__slug=self.kwargs['event_slug'],
event__is_public=True,
slug=self.kwargs['session_slug'],
is_public=True)
context['session'] = s
context['event'] = s.event
return context
此视图的URL模式(包含在基urls.py
)中:
在ModelForm中,我尝试转换EventSessionRegistration字段上的ForeignKey session
(指向EventSession
)以显示一个HiddenInput()
-小部件:
class SessionRegistrationForm(forms.ModelForm):
class Meta:
model = EventSessionRegistration
widgets = {
'session': HiddenInput()
}
但我仍然不知道如何将该字段的初始值设置为我在get_context_data
中设置的'session'
值的id。我尝试过在get_context_data
内设置self.initial = {'session': s.id}
,但我猜此时initial
属性已经被用来构造表单了。在
有什么办法能达到这个目的吗?我错过了什么?在
对,我找到了this question,它处理相同的问题。 最后,我在视图中使用了以下重写的post函数,并在模板的隐藏字段中手动输出会话id:
另外,我还发现了ccbv.co.uk,这是一个很好的资源,可以用来了解中的所有方法和属性CBV:s公司,为如何构造覆盖提供了指导。在
相关问题 更多 >
编程相关推荐