没有用户输入的 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)数据中获取 titletext,并可以将其插入 ArticleModelarticle = 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

Django CreateView 不保存对象也不给出错误

Django Createview根据外键的id保存表单并重定向到页面

Django 1.11 CreateView 传递 URL 参数

在 Django 1.5 中结合 CreateView 和 DetailView