没有用户输入的 Django CreateView 定义字段
Posted
技术标签:
【中文标题】没有用户输入的 Django CreateView 定义字段【英文标题】:Django CreateView define field without user input 【发布时间】:2016-11-05 01:18:07 【问题描述】:假设我有一个CreateArticleView
,如下所示,它扩展了CreateView
。
class CreateArticleView(CreateView):
model = ArticleModel
fields = ['title', 'text']
ArticleModel
实际上有 3 个字段;它还有category
。
category
是一个 url 参数,因为 url 遵循以下正则表达式:127.0.0.1/category/(?P<category>[0-z]+)/articles/new/
。
我需要某种方法从 URL 中获取 category
(这已由 SO 用户回答),然后需要某种方法来获取该数据并将其放入我的 ArticleModel
实例中(这还没有)。
例如,假设用户想要创建一个名为“Russia's Military Just Bought Five Bottlenose Dolphins and It Won't Say Why”的ArticleModel
,其文本为“哇!”
我会从 POST(或 GET)数据中获取 title
和 text
,并可以将其插入 ArticleModel
和 article = ArticleModel.objects.create(title=title_from_POST, text=text_from_POST)
。但是,我还需要为ArticleModel
提供category
kwarg。我将如何插入它?
请注意:我不是在建立一个人们可以发表文章的网站。上面的代码完全是例子。我正在寻找的是某种将 URL 变量获取到基于类的函数的方法。
【问题讨论】:
Django class-based view: How do I pass additional parameters to the as_view method?的可能重复 @solarissmoke 那么在创建对象时如何插入 kwarg 值? 【参考方案1】:您可以覆盖 form_valid 方法并使用 self.kwargs 字典访问 url 参数。
例子:
class CreateArticleView(CreateView):
model = ArticleModel
fields = ['title', 'text']
def form_valid(self, form):
self.kwargs['category'] # Access the category or any other url parameters
return super(CreateArticleView, self).form_valid(form)
来源:https://docs.djangoproject.com/ja/1.9/topics/class-based-views/generic-editing/
【讨论】:
以上是关于没有用户输入的 Django CreateView 定义字段的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django 的 CreateView 提交操作中保存当前登录的用户名?
Django Createview根据外键的id保存表单并重定向到页面