Django访问URL中的PK /对象

时间:2019-04-04 16:15:49

标签: django forms django-views

我有两个课程-事件和回合。回合对事件具有外键约束,因此回合已绑定到事件。

现在要创建回合,我有以下路线

ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(VALUES(id));

并进入一回合

<slug:slug_event>/new/

要保存回合,我需要声明一个事件。所以在我的round / views.py中,我有

<slug:slug_event>/<int:pk_round>/

,我可以选择该回合将附加到的事件。 但我不想有该事件字段,因为该事件已在URL中给出。 所以我想要类似的东西

fields = [..., 'event']

所以我不需要指定事件“两次”。

1 个答案:

答案 0 :(得分:1)

您可以使用URL中的链接从数据库中获取事件:

def form_valid(self, form):
    event = get_object_or_404(Event, slug=self.kwargs['slug_event'])
    form.instance.event = event
    return super().form_valid(form)

现在您可以从表单的字段中删除“事件”。

请注意,如果事件不存在,get_object_or_404将显示404页面。您可能还希望对GET请求执行get_object_or_404,以免用户填写无效的表单,然后收到404错误。