用于处理相关对象的基于类的视图混合
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
django related
====
嵌套资源,或者在我们可能希望使用现有对象(如果
可用)的情况下,这些视图缺少功能。这就是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