【问题标题】:Django CreateView define field without user input没有用户输入的 Django CreateView 定义字段
【发布时间】: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


【解决方案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/

【讨论】:

    猜你喜欢
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 2019-10-12
    • 2019-09-11
    • 2017-08-16
    相关资源
    最近更新 更多