python - 在“CreateView”中设置类变量而不是使用冗余的局部变量
问题描述
我创建了一个视图类继承自
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)
有人可以指导我如何以正确的方式做到这一点吗?
解决方案
django.views.generic.base.View
最后我在https://docs.djangoproject.com/en/2.2/ref/class-based-views/base/#django.views.generic.base.View中找到了流程图:
- 设置()
- 派遣()
- http_method_not_allowed()
- 选项()
根据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)
推荐阅读
- sqlite - 如何将sqlite中的对象转换为仅日期并从参数化查询中传递日期
- google-sheets - 单击该单元格时如何切换单元格颜色
- azure-functions - 有时将持久活动检测为非确定性工作流
- git - Git,Github - origin/main vs origin/master
- reactjs - 我正在使用 npx create-react-app myapp 命令创建一个 React 应用程序,但它给出了这个错误:
- python - JupyterLab ipywidget 关闭一个小部件并在按钮单击时显示另一个
- javascript - 在javascript中以编程方式创建类声明?
- python - 当我多次运行模型时,CNN 的 model.evaluate() 准确率超过 100%。如何分离每个 model.fit() 实例?
- python - 箭头不与 x 和 y 轴的编号对齐
- android - 为什么隐藏地址栏时 html { height:100% } 不起作用?