问题标签 [django-class-based-views]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5886 浏览

django - 基于 Django 类的视图的反向 url

我正在尝试做类似的事情:

在 urls.py 中:

在views.py中

但这似乎不起作用。我得到一个带有参数“()”和关键字参数“{'pk':13240L,'foo':'bar}”的'video_detail'的反向。

但是,这确实有效:

IE。从反向调用中删除 foo: bar 。执行此操作并在反向 url 中传递额外参数的正确方法是什么?

0 投票
2 回答
1329 浏览

python - Django 按年份分页

我可以在我网站的索引页面上使用通用视图预览我的新闻剪辑数据库中的 100 个最新项目:

DPRM

现在我需要在我网站的一个单独的逻辑部分中对我的数据库进行分页。我需要按年分页。我不在乎每年有多少条目,我只想从 URL 中获取年份,从那一年获取数据库项目(即 /newsitems/validyearhere),然后通过导航方式将其呈现给用户通过多年。在 Rails 中有一种方法可以做到这一点,但我在 Django 中找不到方法。

我可以使用当前部署的模型吗?

除了当前日期字段之外,我是否必须添加一个多余的年份数据库字段?模式是否需要以任何方式发展以适应这种情况?

如果用户输入一年没有条目或数据不是一年,我也需要它优雅地失败。

请尽可能简单地解释这一点,因为我对 Django 非常陌生,并且发现学习曲线陡峭。

0 投票
2 回答
1539 浏览

python - Django,类视图:如何使用表单对象保存会话数据?

我正在尝试将当前请求会话中的用户名存储到 db 对象中。如何从基于类的视图中执行此操作?有没有“干净”的方法来做到这一点?我应该覆盖/子类什么?

我有一个看起来像这样的模型:

我还有一个基于内置通用视图的视图django.views.generic.CreateView。我还使用了与我的模型一起使用的默认 ModelForm 类,以及{{ form }}我的模板中的默认类。AFAIK,会话和身份验证应用程序/中间件已正确设置——按照新 Django 项目中的默认设置。

我发现了这篇文章,它的内容大致相同,但角度不对,而是使用了函数视图。

到目前为止,我的想法是覆盖表单类中的某些内容并将用户名插入到清理后的数据中。有没有更好的办法?有正确的方法吗?

编辑:到目前为止的解决方案,不起作用,带有 IntegrityError: author_id cannot be null

我根据我在 django/views/generic/edit.py 中找到的内容编写了这个,它将此实现用于类 ModelFormMixin:

这是上面 super().form_valid() 调用的方法。

编辑:我的解决方案的问题是我对 Python 的继承模型的理解。超类调用form_valid()时,调用的是自己的版本,不是我的覆盖;我的代码根本没有运行。

0 投票
2 回答
225 浏览

django - 当实例未提供给表单时,CreateView 抛出“DoesNotExist”

我在以下设置中收到“DoesNotExist”错误 - 我已经尝试调试了一段时间,但无法弄清楚。

当我这样做并发布“名称”和“类型”的数据时 - 我收到“DoesNotExist”错误。它似乎与 UpdateView 一起工作正常 - 或者当传递一个“实例”来初始化表单时。

这是引发错误的确切位置: /usr/lib/pymodules/python2.7/django/db/models/fields/related.py in get,第 301 行

有谁知道可能会发生什么?

谢谢

0 投票
2 回答
516 浏览

django - Ajax 和 ModelForm 更新模型

我正在尝试使用 Ajax/POST 对模型进行更新。我希望能够只发送正在更新的字段,而不是表单中的所有字段。但这似乎导致表单无效。有没有好的方法来做到这一点?

例如:

更新名称时,我想发送包含此数据的 POST

同样用于更新类型。

有没有好的方法来做到这一点?

0 投票
2 回答
56786 浏览

django - 如何使用基于类的视图处理表单(通过 get 或 post)?

我正在尝试学习基于类的视图,因为详细信息或列表视图并不复杂。

我有一个搜索表单,我只想看看我是否发送查询以显示结果。

这是函数代码(不是我的,来自 django 书):

忽略 ajax 事实(只是为了让问题更容易现在),我如何将其转换为基于类的视图?

我很快尝试了这样的事情:

不起作用,我得到一个:“'NoneType' 对象不可调用”

很公平,我今天从这些东西开始。

那么,有什么方法可以创建一个基于类的视图来管理获取(如果需要也可以发布)请求?

我还有一个例子:

这会以与第一个相同的方式“转换”吗?或者他们扩展了不同的视图?

我很困惑。我不知道第一个是 ProcessFormView 和第二个 FormView 还是什么。

谢谢。

编辑:我结束的解决方案:

我把这个留给有同样问题的人:)

0 投票
2 回答
203 浏览

python - 在获取请求中验证表单,如何?

以我的完美主义方式,我来这里是为了询问更多关于没有很好记录的基于类的观点的问题。

我花了大约 5 个小时来学习基于类的视图,潜伏在代码中,然后我得到了一个问题。

也许我想做的是愚蠢的,如果是这样,那就这么说吧。

我举一个简单的例子:

这是一个完美的有效类(它是,对吧?)。

您有一个表单,并使用查询参数发出 GET 请求。

奇迹般有效。

但是让我们想象一下……我验证了查询输入以防止某种类型的攻击,我发现查询是恶意的,所以我输入了一个验证错误。

使用旧函数,我有一个表单实例(空),如果需要,我将数据放入其中并验证错误。我总是返回那个实例,如果是空的(第一次请求)或者它充满了错误(恶意查询的情况)。

问题在于基于类的视图。在我的 get 方法中,我使用了一个额外的SearchForm实例,因此如果我放置验证内容,并且如果我在父亲上调用get ,它将使用“form_class”上的实例,该实例将为空。

所以,我认为应该有一种方法,我总是使用相同的表单,我的意思是:我调用请求方法,我选择 form_class(不是创建一个新表单),传递数据,验证并且父亲会返回那个带有验证内容的表单。

我不确定我是否正确解释了这一点。简而言之,我在 get 中创建了表单的副本,但我返回了另一个副本为空的父亲 get,所以当我显示模板时,不会出现错误,因为发送的表单是空的。

有任何想法吗?谢谢。

0 投票
1 回答
2884 浏览

django - 将基于函数的视图转换为仅具有表单且没有模型(对象)的基于类的视图

现在,这就是在用户配置文件中更改密码的方式。知道不涉及模型的情况下,将其转换为基于类的视图的最佳方法是什么?

这是更改密码的视图

这是更改密码的表格

这是网址

如您所见,不涉及任何模型,因为密码将在验证时替换“用户”密码字段。将其转换为基于类的视图的任何简单方法?有关系吗?

0 投票
1 回答
699 浏览

django - 类视图中的命名空间

我无法在类视图中获取命名空间名称 ID。有谁知道?

我不想做的是过滤查询集以仅获取每个命名空间的适当模型。

这是我的代码:

网址.py

项目.urls.py

项目列表视图.py

0 投票
1 回答
313 浏览

django - 编写一个既显示基于日期的对象又显示表单的基于 django 类的视图的好方法是什么?

编写既显示基于日期的对象又显示表单的基于类的视图的最佳方法是什么?用例是一个站点索引页面视图,它既显示今天的对象,又具有联系表。

起初我想使用 TodayArchiveView 和ContactFormView作为我的站点索引页面视图的 mixin。但是,TodayArchiveView 继承自 BaseDateListView,ContactFormView 继承自 ProcessFormView。ProcessFormView 和 BaseDateListView 都实现了 get() 并最终使用非常不同的数据调用 render_to_response ,所以我认为这不起作用,因为即使我可以通过 super 调用两者,也会返回哪个?(我什至不确定我对此的想法是否正确;我仍在考虑多重继承。)

然后我想编写我自己的 get() 来结合两个 get 的功能,因为据我所知,它们的功能不会冲突。所以最终看起来像:

这是正确的方法吗?

作为一个更大的问题,你怎么知道哪些 mixin 可以相互使用?我必须去 django 源代码才能意识到这两个类都在实现 get()。