从 Django 的 CreateView 中的 url 参数设置 ForeignKey 值
Set ForeignKey value from url parameter in Django's CreateView
class Event(models.Model):
...
class Question(models.Model):
event = models.ForeignKey(Event)
我有 url 模式,例如 /events/(?P<event_id>\d+)/question/add/$
绑定到 QuestionCreateView
QuestionCreateView(CreateView):
model = Question
form_class = QuestionForm
def form_valid(self, form):
form.instance.event = [???]
return super(QuestionCreateView, self).form_valid(form)
我想得到什么:
- 如果用户请求无效
event_id
如 /events/9999999/objects/add/
,则抛出 404 错误
- 从 url 的
event_id
获取一个 Event
实例并在保存前填充我的新 Question
实例
- 以 DRY 方式进行,因为我有一些其他模型具有这样的关系
基于 class 的视图是否可行?看起来 DetailView
和 Event
以及 CreateView
和 Question
的疯狂组合。
Url 关键字参数在视图中可用 self.kwargs
:
from django.shortcuts import get_object_or_404
class QuestionCreateView(CreateView):
model = Question
form_class = QuestionForm
def form_valid(self, form):
form.instance.event = get_object_or_404(Event,
pk=self.kwargs['event_id'])
return super(QuestionCreateView, self).form_valid(form)
class Event(models.Model):
...
class Question(models.Model):
event = models.ForeignKey(Event)
我有 url 模式,例如 /events/(?P<event_id>\d+)/question/add/$
绑定到 QuestionCreateView
QuestionCreateView(CreateView):
model = Question
form_class = QuestionForm
def form_valid(self, form):
form.instance.event = [???]
return super(QuestionCreateView, self).form_valid(form)
我想得到什么:
- 如果用户请求无效
event_id
如/events/9999999/objects/add/
,则抛出 404 错误
- 从 url 的
event_id
获取一个Event
实例并在保存前填充我的新Question
实例 - 以 DRY 方式进行,因为我有一些其他模型具有这样的关系
基于 class 的视图是否可行?看起来 DetailView
和 Event
以及 CreateView
和 Question
的疯狂组合。
Url 关键字参数在视图中可用 self.kwargs
:
from django.shortcuts import get_object_or_404
class QuestionCreateView(CreateView):
model = Question
form_class = QuestionForm
def form_valid(self, form):
form.instance.event = get_object_or_404(Event,
pk=self.kwargs['event_id'])
return super(QuestionCreateView, self).form_valid(form)