我创建了一个继承自
的视图类django.views.generic.CreateView
一切正常,但是在两种不同的类方法中,我有以下两行代码:
event = get_object_or_404(Event, pk=self.kwargs['pk'])
我已经尝试在 init 方法中设置类变量,但是我尝试过的所有操作最终都会出现错误消息。
这是我的课程,两行多余:
class StaffCreateView(CreateView):
model = Staff
form_class = StaffForm
def get_initial(self):
"""
Returns the initial data to use for forms on this view.
"""
initial = super().get_initial()
event = get_object_or_404(Event, pk=self.kwargs['pk'])
initial['country'] = event.default_country_of_staff
initial['max_number_of_shifts'] = event.default_max_number_of_shifts_per_staff
return initial
def form_valid(self, form):
event = get_object_or_404(Event, pk=self.kwargs['pk'])
form.instance.event = event
return super().form_valid(form)
有人可以指导我正确的方法吗?
答案 0 :(得分:0)
最后,我在https://docs.djangoproject.com/en/2.2/ref/class-based-views/base/#django.views.generic.base.View中找到了django.views.generic.base.View
的流程图:
根据setup()
方法的描述,我认为这是设置实例属性self.event
所以我的班级现在看起来像这样:
class StaffCreateView(CreateView):
model = Staff
form_class = StaffForm
def setup(self, request, *args, **kwargs):
super().setup(request, *args, **kwargs)
self.event = get_object_or_404(Event, pk=self.kwargs['pk'])
def get_initial(self):
"""
Returns the initial data to use for forms on this view.
"""
initial = super().get_initial()
initial['country'] = self.event.default_country_of_staff
initial['max_number_of_shifts'] = self.event.default_max_number_of_shifts_per_staff
return initial
def form_valid(self, form):
form.instance.event = self.event
return super().form_valid(form)