我正在使用Django / Python开发一个网站。我对这项技术很陌生,我想以正确的方式做网站。 所以这是我的问题:
想象一下,有一个产品实体和产品视图来显示产品信息。 我在我的views.py中使用(product_view)。
还有Message实体,Product可能有多个。 在“产品视图”页面中(我使用" product_view"在views.py中执行操作)我还会查询消息并显示它们。
现在,应该有一个表单来提交新邮件(在产品视图页面中)。
问题#1 :应该形成什么动作名称(Django方式,我明白我可以指定我想要的任何动作)?
选项#1 :它可能是相同的操作" product_view"。在product_view逻辑中,我可能会检查HTTP方法(获取或发布)并处理表单提交或只是获取请求。但是对于我向" product_view"提交消息感到有点争议。动作。
选项#2 :创建一个名为" product_view_message_save"的动作。 (我不想创建" message_save",因为可能有多种方式提交消息)。所以我处理那里的逻辑,然后我重定向到product_view。现在有趣的部分是:如果表单无效,我会尝试将此表单放入会话,重定向到" product_view",在那里获取表单并在消息字段附近显示错误。但是,Django中的表单不可序列化。我可以找到一种解决方法,但它感觉不舒服。
你会说什么? 任何帮助/建议都将受到高度赞赏!
最诚挚的问候, 马克西姆
答案 0 :(得分:1)
您可以使用任一选项。
选项#1 :在post
方法中(如果使用基于类的视图,否则请检查“post”作为请求类型),只需使用{{实例化表单1}},然后检查表单的MessageForm(request.POST)
方法。如果表单有效,请使用is_valid()
代码块中的HttpResponseRedirect
保存Message对象并重定向回同一视图。
如果您要检查模板中的相关if form.is_valid():
对象,则新创建的消息应该在那里。
选项#2 :非常类似于选项#1,除非表单无效,请重新呈现用于Messages
且无效的相同模板表单实例包含在模板上下文中。