用于处理相关对象的基于类的视图混合

django-related的Python项目详细描述


=====
django related
====


``createview``或``updateview``只处理单个对象。但是,对于
嵌套资源,或者在我们可能希望使用现有对象(如果
可用)的情况下,这些视图缺少功能。这就是django相关的
所提供的。内容:

它可以直接使用
:从相关视图导入redirectonexistingmixin,createwithrelatedmixin



getexistingmixin
==

它目前只是
RedirectOneExistingMixin_u的别名,以提供向后兼容性。由于名称混乱,它将被删除。


只有类名已更改。所有属性和方法名都保持不变。




===


当试图创建已存在于数据库中的对象时,将使用此mixin。如果对象不存在于
数据库中,则它将不会执行任何操作。

基本用法::


from related.views import redirectonexistingmixin
from django.views.gneric import createview

from models import foo


class myview(redirectonexistingmixin,createview):
model=foo
现有的重定向url='/bar'

甚至不处理"foo"的模型表单。重定向路径可以使用下面进一步讨论的选项进行自定义。


请注意,这种混合将导致额外的数据库查询,以确定对象是否存在。



`` existing_form_class``(`` get_existing_form_class()````)
使用指定的表单来处理请求,而不是请求
参数。默认值为"none"(不使用窗体)。

``现有窗体字段`
包含有关对象存在性的数据的窗体字段。注意,这个
字段不需要对实际对象求值。任何非``false`
值都将被视为表示对象的存在。最常见的用法是使用"modelChoiceField"或某个预先读取数据库的字段,并提供仅当存在对象时才可用的值的选择。

"existing"form"u initial"`(``get"existing"form"u initial()`)
"existing_form_class"表单的初始值(如果使用form
)。

`"existing_pk_field`
包含主键的模型字段。默认值为"pk"。

``现有的"slug"字段`
包含slug的模型字段。默认值为"slug"`

`"existing_request_pk_key``
表示主键的请求参数。默认值为"pk"。

`` existing_request_slug_key`
表示slug的请求参数。请注意,如果指定了主键(默认情况下是指定的),并且主键是传入请求的,则不会查找slug。


`` existing_redirect_url``(`` get_existing_redirect_url()`)
必需属性。如果对象
存在,则客户端将重定向到的URL。

``existing_form_name``(``get_existing_form_name``)
自定义包含该表单的上下文对象的名称。

related object mixin
===


此mixin是一个通用的相关对象预取mixin。在使用这个mixin之前,让我们先讨论一种没有relatedobjectmixin的
开销的方法,这种方法在只获取
相关对象而不执行其他操作的情况下可以很好地工作。考虑这个url模式::

/posts/(?p<;pk>;\d+)/comments

(是的,django中包含了一个完整的注释系统,因此,对于
这个老生常谈的例子很抱歉。)在上面的例子中,您通常会对
注释使用列表视图。但您也可能希望获取post对象。在这种特殊情况下,不需要使用"related object mixin",因为可以将django的内置"singleobjectmixin"与"listview"结合起来,实现您想要的


使用django的db api。例如,如果您有一个``book`
对象,则可能可以将相关作者作为``book.author``.


只有当您需要两个物理上不相关的对象(例如在视图中使用两个``singleobjectmixin`` mixin`)时,此mixin才有用。如果通过外键两个对象之间没有实际的
关系,那么您应该使用
这个mixin。


对于与django相关的早期版本的用户,必须注意
这个mixin只是从以前的单片
createwithrelatedmixin中剥离出来的②因此,它的行为或多或少与mixin相同。


这里有一个示例:


从django.views.detail import singleobjectmixin
从django.views导入formview

cards.forms import matchcardsform

查看`/match/(?p<;第一张卡pk>;\d+/(?<;second_card_pk>;\d+/`


类视图附件(related objectmixin,single objectmixin,formview):
model=card
related_model=card
pk url_kwarg='first_card_pk'
related_pk url_kwarg='second_card_pk'
form_class=matchcardsform
模板名='attachment.html'
成功URL='/foo'


def获取初始值(self):
返回{
"第一张卡":self.object.pk,
"第二张卡":self.related\u object.pk,
}

defform_valid(self,form):
对表单做点什么,等等

请注意,属性的命名基本上是从带有"related"前缀的"singleobjectmixin"中克隆出来的。在大多数情况下,如果您知道在
``singleobjectmixin``中调用了什么,您可以猜测需要设置的属性。

``relatedobjectmixin``当前仅限于获取一个对象,与`singleobjectmixin``类似,因此不适用于复杂的嵌套
结构。同样,在许多情况下,使用django的db api会更加合理。


可以使用以下属性(和匹配的
方法)自定义视图:

`` related廑model``
当前模型嵌套的相关模型。此属性是
必需的。

``related_u redirect_url``(``get_u related_u url()```)
如果指定此属性,则视图将重定向,而不是提升
``django.http.http404``或返回``django.http.httpresponsegone``。
默认值为"none"。

"related_u message``(``get_rlated_u message()``)
如果使用"related_u redirect_u url`",则"django.contrib.messages`"用于显示错误消息。此属性用于自定义此
消息。默认值为"`%s不存在"``````````s``将计算为
``related_model```的详细名称。

``related_pk_field``
``rela上的字段Ted_model``包含主键。默认值
为`'pk``。

`` related_pk_url_kwarg``
包含主键的url参数。默认为"pk"。

"related"slug"字段"`
"related"模型中包含sulug字段的字段。默认
为"slug"`.

"related_slug_url_kwarg`
包含slug字段的url参数。默认为`'slug`。

``相关的`对象`名称`(``获取相关的`对象`名称`)`)
自定义包含相关对象的上下文对象的名称。

``缓存后端`(``获取缓存后端`)
指定实现缓存方法的对象。默认情况下,此对象为
``django.core.caching.cache`'。指定
的任何接口都必须提供与默认接口相同的方法。

========


当我们处理嵌套资源的"createView"时,将使用此mixin。主要假设是路径的较高级别包含指向相关模型对象的slug
或pk。


正如related object mixin节中所讨论的,此mixin基于它,因此可以使用相同的自定义选项。


rmal createview(可以说服它使用``queryset``属性和``get_object``
方法给您相关的对象)和这个mixin存在于表单处理中。这个mixin有两个不同的功能:


1。它确保相关对象存在(强制执行类似于
``get_object``的行为)
2。它将相关对象附加到提交的
表单中的相应字段。


以下是一个示例:


tachmentmodelform


`/posts/(?p<;slug>;[\w-]+)/附件`

ET请求是用指向不存在的post的URL中的slug向该视图发出的。
如果post请求是针对同一个URL发出的,则如果post不存在,则返回`django.http.httpresponsegone`(410)
。否则,将处理``customAttachmentModelForm`
,根据slug找到的``post``对象将被
添加到表单处理后对象的``post``字段中。



``related_model`
嵌套当前模型的相关模型。此属性是必需的。


``相关字段`
当前模型上必须指向相关对象的字段。默认情况下,低大小写的"related\u model"的类名(例如,对于名为"foo"的
模型,"foo"的"foo")。

"related\u 404"重定向"u url"`(`"get\u related\u 404 url()`)
如果指定,视图将重定向,而不是提升
"django.http.http404"或返回"djang"o.http.httpresponsegone``。
默认值为"none"。

"related_u message``(``get_rlated_u message()``)
如果使用"related_u redirect_u url`",则"django.contrib.messages`"用于显示错误消息。此属性用于自定义此
消息。默认值为"`%s不存在"``````````s``将计算为
``相关的`模型``的详细名称。

``相关的`` pk`字段`
``相关的`模型``上包含主键的字段。默认值
为"pk"。

"related""pk""url""kwarg`
包含主k的url参数哎呀。默认为"pk"。

"related"slug"字段"`
"related"模型中包含sulug字段的字段。默认
为"slug"`.

"related_slug_url_kwarg`
包含slug字段的url参数。默认为"slug"。

``相关对象名`(``获取相关对象名()`)
自定义包含相关对象的上下文对象名。

``完整性错误消息`(``获取完整性错误消息()`)
指向相关的
对象,视图将重新提交表单,但也将使用"django.contrib.messages"向响应对象添加错误消息
。此属性
自定义消息。默认值为``此类记录已存在'``。

``缓存后端'`(``获取缓存后端'`)
指定实现缓存方法的对象。默认情况下,此对象为
``django.core.caching.cache`'。您指定的任何接口
都必须提供与默认接口相同的方法。


报告错误
==


请将错误和功能请求报告给BitBucket"问题跟踪程序"。

_问题跟踪:https://bitbucket.org/monwara/django-related/issues

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JList侦听器找不到符号   多点触摸跨平台java应用程序(Windows、Mac和Linux(Ubuntu)(可能是Android))   在UnitTest中找不到java类加载器资源   java当我尝试在Eclipse中运行我的minecraft mod时,我总是遇到这个错误,这是什么意思?   内部有一个同步块的静态方法,在java中阻止整个类?   不支持java操作:具有BillableStatus的费用在采购中应具有AccountBasedExpenseLineDetail行的CustomerRef   java运行时常量池GC集合   java无法解析配置“:app:\u debugApk”的所有依赖项。找不到名为“default”的配置   在GCP计算引擎中托管Neo4j的java   java如何从BroadcastReceiver更新片段选项卡?   线程“main”组织中的java异常。冬眠注释异常:@org。冬眠注释。表引用未知表:ProductForPractice   在Java/Groovy中嵌入处理   java Android REST教程/示例项目   java我可以在同一测试中在一个模拟器上启动应用程序,在另一个模拟器上启动移动浏览器吗?   java如何更改通知横幅的方向?   安卓 Java帮助实现Firebase授权   if else之后的rs.next()中出现java错误?