问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

django如何自定义模型顺序(2023年最新解答)

发布网友 发布时间:2024-09-17 03:54

我来回答

1个回答

热心网友 时间:2024-10-17 20:51

导读:很多朋友问到关于django如何自定义模型顺序的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!

如何自定义Django主键自增的起始值

1234

fromdjango.dbimportmodels#Createyourmodelshere.classStudent(models.Model):student_id=models.BigAutoField(primary_key=True)

这是model定义。

默认情况下,自增id都是从1开始计数的。如果你想从10001开始,就需要手动创建一个对象,为其设置student_id为10001,以后创建对象的studeng_id就从10002开始自动增加。

first_student=models.Student(student_id=10001)

first_student.save()

更多相关内容参考刘江的Django教程

请教一个django后台管理页面问题

django的后台扩展有扩展模型、扩展模型字段(field)方法,但我还是最喜欢这种扩展方式(来自django的官方文档,非常适合自定义):

转自:

原理很简单,就是用在url.py中添加一条url配置覆盖掉后台默认的url处理,然后就可以随心所欲的编写自己的view了

显而易见,对数据编辑工作来说,该管理界面极为有用(想象一下)。如果用于完成某种数据的录入工作,该管理界面实在是无人能及。我们猜想本书绝大多数读者都有成堆数据录入任务。

Django管理接口特别关注那些没有技术背景的用户来使用数据录入;这也是该功能的开发目的。在Django最初开发地报社,开发一个典型的在线市政供水质量报告系统,需求如下:

负责该题材的记者与某个开发人员会面,提交现有数据。

开发人员围绕该数据设计一个模型,并为该记者开发出管理界面。

在记者将数据录入Django的同时,程序员就可以专注于开发公众访问界面了(最有趣的部分!)。

换句话说,Django管理接口之所以存在的首要目的是为了方便内容编辑人员和程序员同时开展工作。

当然,除了显而易见的数据录入任务之外,我们发现管理界面在其他一些情况下有是很有用处的。

CrqrWVahref=”“xwyekefymefu/a,[url=]eycmfqtvgmvb[/url],[link=]ibbcerwyzvhq[/link],

管理获得的数据:很少有真实数据输入会和像这样的站点相关联,因为多数数据来自自动生成的源头。然而,当所获取的数据出错而导致麻烦时,能够便捷地找到并修改出错数据将会有助于问题解决。

无需或者仅需略为定制之后,Django管理界面就能处理绝大部分常见情形。然而,正是因为在设计上极力折衷,Django管理界面能够很好地处理这种常见情形也就意味着它无法同样处理其它一些编辑模型。

4yQjmUahref=”“kdqfnmmekszw/a,[url=]zusybryiqeir[/url],[link=]grlqejhxwprt[/link],

管理之道

BmuFntahref=”“ifhkpydljkaf/a,[url=]mqitqhmcazco[/url],[link=]qcmerxzxnmhj[/link],

受信任用户编辑结构化的内容。

是的,这非常的简单,但这种简单是建立在一整堆假定之上的。Django管理界面的全部设计理念均直接遵循这些假定,因此让我们深入理解一下这些后续小节中所出现术语的含义。

受信任用户

管理界面被设计成由你这样的开发人员所信任的人使用。这里所指的并非只是通过身份验证的人;而是说Django假定可以相信内容编辑者只会做对的事情。

反过来说,这也就意味着如果你信任用户,他们无需征得许可就能编辑内容,也没有人需要对他们的编辑行为进行许可。另一层含义是,尽管认证系统功能强大,但到本书写作时为止,它并不支持对象级基础的访问限制。如果你允许某人对自己的新闻报道进行编辑,你必须能够确信该用户不会未经许可对其他人的报道进行编辑。

编辑

Django管理界面的首要目的是让用户编辑数据。乍一看这是显而易见的,但仔细一想却又变得有点难以捉摸和不同凡响。

举例来说,虽然管理界面非常便于查验数据(如刚才所讨论的那样),但这并不是它的设计初衷。比如我们在第12章中谈到的,它缺少视图许可。Django假定如果某人在管理界面中可以查看内容,那么也可以进行编辑。

还有件更重要的事情要注意,那就是对于远程调用工作流的缺乏。如果某个特定任务由一系列步骤组成,没有任何机制确保这些步骤能够以某个特定顺序完成。Django管理界面专注于编辑,而不关心修改周边的活动。对工作流的这种回避也源自于信任原则:管理界面的设计理念是工作流乃人为事物,无需在代码中实现。

最后,要注意的是管理界面中缺少聚合。也就是说,不支持显示总计、平均值之类的东西。再次重申,管理界面只用于编辑——它预期你将通过定义视图来完成其它所有工作。

结构化的内容

30CEN9ahref=”“bxyzitjhvwis/a,[url=]ylhgcrwsnuue[/url],[link=]mecoeqqxpail[/link],

就此打住

现在可以肯定的是,Django的管理界面并不打算成为所有人的万能工具;相反我们选择了专心做一件事情,并把它完成得尽善尽美。

SaPQz9ahref=”“fmvbpdngtcts/a,[url=]tvwreqwomvco[/url],[link=]nwfgxlxpodeq[/link],

必须记住,尽管管理界面很复杂,但它始终只是一个应用程序。只要有充足的时间,任何Django的开发者都能做到admin接口做到的所有事。因此,我们需要寄希望于将来会有一个完全不同的admin接口会出现,这个新的接口拥有一系列不同的前提假设,并且工作方式也完全不同。

最后要指出的是,在本文写作之时,Django开发者们正在进行一个新的管理界面的开发工作,该版本将提供更多定制灵活性。当你阅读本文时,这些新特性也许已经进入了真实的Django发布之中。你可以向Django社区的某些人了解是否已经整合了newforms-admin主干代码。

定制管理模板

lrYxwtahref=”“uokhfgxirpcl/a,[url=]wqhpuiouinaf[/url],[link=]fpatpucympci[/link],

现在,我们来看看如何来快速定制admin管理接口的外观。第6章讲到了一些最常见的任务:修改商标(为那些讨厌蓝色的尖发老板),或者提供一个自定义的form。

更进一步的目标常常会包含,改变模板中的一些特殊的项。每一种admin的视图,包括修改列表、编辑表单、删除确认页以及历史视图,都有一个与之相关联的模板可以以多种方式来进行覆盖。

首先,你可以在全局上覆盖模板。admin视图使用标准的模板载入机制来查找模板。所以如果你在模板目录中创建了一个新的模板,Django会自动地加载它。全局的模板在表17-1中列出。

Fd2cvvahref=”“fphafdvvmhea/a,[url=]mompqgnztmob[/url],[link=]oamzxjphpsxv[/link],

大多数时候,你可能只是想修改一个单独的对象或应用程序,而不是修改全局性的设定。因此,每个admin视图总是先去查找与模型或应用相关的模板。这些视图寻找模板的顺序如下:

admin/app_label/object_name/template.html

JRmAl2ahref=”“kqeldaxlpkep/a,[url=]ihzkjznjrsqj[/url],[link=]sqhirlipxjfo[/link],

admin/template.html

例如,在books这个应用程序中,Book模块的添加/编辑表单的视图会按如下顺序查找模板:

admin/books/book/change_form.html

admin/books/change_form.html

admin/change_form.html

自定义模型模板

大多数时候,你想使用第一个模板来创建特定模型的模板。通常,最好的办法是扩展基模板和往基模板中定义的区块中添加信息。

例如,我们想在那个书籍页面的顶部添加一些帮助文本。可能是像图17-1所示的表单一样的东西。

图17-1.一个自定义管理编辑表单.

这做起来非常容易:只要建立一个admin/bookstore/book/change_form.html模板,并输入下面的代码:

{%extends"admin/change_form.html"%}

{%blockform_top%}

pInsertmeaningfulhelpmessagehere.../p

{%endblock%}

mGrlX4ahref=”“omnhyzkldddt/a,[url=]ydlrelntzksj[/url],[link=]zzizrvybyaol[/link],

自定义JavaScript

这些自定义模型模板的常见用途包括,给admin页面增加自定义的javascript代码来实现一些特殊的视图物件或者是客户端行为。

幸运的是,这可以更简单。每一个admin模板都定义了{%blockextrahead%},你可以在head元素中加入新的内容。例如你想要增加jQuery()到你的admin历史中,可以这样做:

{%extends"admin/object_history.html"%}

{%blockextrahead%}

scriptsrc=""type="text/javascript"/script

scripttype="text/javascript"

//codetoactuallyusejQueryhere...

/script

{%endblock%}

备注

我们并不知道你为什么需要把jQuery放入到历史页中,但是这个例子可以被用到任何的模板中。

TYy7isahref=”“hpswriedwzmw/a,[url=]bvkzcktnoefm[/url],[link=]wkbudpcvacdz[/link],

创建自定义管理视图

现在,想要往Django的admin管理接口添加自定义行为的人,可能开始觉得有点奇怪了。我们这里所讲的都是如何改变admin管理接口的外观。他们都在喊:如何才能改变admin管理接口的内部工作机制。

首先要提的一点是,这并不神奇。admin管理接口并没有做任何特殊的事情,它只不过是和其他一些视图一样,简单地处理数据而已。

确实,这里有相当多的代码;它必须处理各种各样的操作,字段类型和设置来展示模型的行为.当你注意到ADMIN界面只是一系列视图(Views)的集合,增加自定义的管理视图就变得容易理解了。

作为举例,让我们为第六章中的图书申请增加一个出版商报告的视图。建立一个admin视图用于显示被出版商分好类的书的列表,一个你要建立的自定义admin报告视图的极典型的例子。

首先,在我们的URLconf中连接一个视图。插入下面这行:

(r'^admin/books/report/$','mysite.books.admin_views.report'),

在将这行加入这个admin视图之前,原本的URLconf应该是这样:

fromdjango.conf.urls.defaultsimport*

urlpatterns=patterns('',

(r'^admin/bookstore/report/$','bookstore.admin_views.report'),

(r'^admin/',include('django.contrib.admin.urls')),

)

为什么要将定制试图置于管理内容之前呢?回想一下,Django是按照顺序处理URL匹配式的。管理内容几乎匹配内容点之后所有的东西,因此如果我们把这几行的顺序颠倒一下,Django将会为该匹配式找到一个内建管理视图,并将试图在books应用程序中为Report模型再入更新列表,而这却是不存在的。

现在我们开始写视图。为了简单起见,我们只把所有书籍加载到上下文中,让模板用{%regroup%}标签来处理分组操作。创建books/admin_views.py文件并写入以下内容:

frommysite.books.modelsimportBook

fromdjango.templateimportRequestContext

fromdjango.shortcutsimportrender_to_response

fromdjango.contrib.admin.views.decoratorsimportstaff_member_required

defreport(request):

returnrender_to_response(

"admin/books/report.html",

{'book_list':Book.objects.all()},

RequestContext(request,{}),

)

report=staff_member_required(report)

因为我们把分组操作留给了模板,该视图非常简单。然而,有几段微妙的细节值得我们搞清楚。

我们使用了django.contrib.admin.views.decorators中的staff_member_required修饰器。该修饰器与第12章中讨论的login_required类似,但它还检查所指定的用户是否标记为内部人员,以决定是否允许他访问管理界面。

该修饰器保护所有内容的管理视图,并使得视图的身份验证逻辑匹配管理界面的其它部分。

我们在admin/之下解析了一个模板。尽管并非严格要求如此操作,将所有管理模板分组放在admin目录中是个好的做法。我们也将应用程序所有的模板放置在名叫books的目录中,这也是最佳实践。

我们将RequestContext用作render_to_response的第三个参数(``context_instance``)。这就确保了模板可访问当前用户的信息。

参看第十章了解更多关于RequestContext的信息。

最后,我们为这个视图做一个模板。我们将扩展内置管理模板,以使该视图明确地成为管理界面的一部分.

{%extends"admin/base_site.html"%}

{%blocktitle%}Listofbooksbypublisher{%endblock%}

{%blockcontent%}

divid="content-main"

h1Listofbooksbypublisher:/h1

{%regroupbook_list|dictsort:"publisher.name"bypublisherasbooks_by_publisher%}

{%forpublisherinbooks_by_publisher%}

h3{{publisher.grouper}}/h3

ul

{%forbookinpublisher.list|dictsort:"title"%}

li{{book}}/li

{%endfor%}

/ul

{%endfor%}

/div

{%endblock%}

通过扩展admin/base_site.html,我们没费丝毫气力就得到了Django管理界面的外观。图17-2我展示了像这样的一个最终结果。

图17-2.一个自定义按出版商归类的图书管理视图

使用该技术,你可以向管理界面中添加任何你梦想中的东西。需要记住的是这些被叫做定制管理视图实际不过是普通的Django视图,你可以使用在本书其它部分所学到的技术制作出符合自己需要的复杂管理界面。

覆盖内置视图

有时缺省的管理视图无法完成某项工作。你可以轻松地换上自己的定制视图;只需要用自己的URL遮蔽内建的管理视图。也就是说,如果在URLConf中你的视图出现在缺省管理视图之前,你的视图将取代缺省视图被调用。

举例来说,我们可以用一个让用户简单输入ISBN的窗体来取代内建的书籍创建视图。然后,我们可以从查询该书的信息,并自动地创建对象。

这样的视图的代码留给读者作为一个练习,重要的部分是这个URLconf代码片断:

(r'^admin/bookstore/book/add/$','mysite.books.admin_views.add_by_isbn'),

如果这个代码片段在URLConf中出现于管理URL之前,add_by_isbn视图将完全取代标准的管理视图。

按照这种方式,我们可以替换删除确认页、编辑页面或者管理界面的其它任何部分。

Django如何自定义个后端管理模块

这个东西的升级:1、你要对整个后端的代码非常熟悉,用到那些Django特性一清二楚。2、官方有upgradeguide之类的文档,根据所用特性照着改就行了。

如何使用Django生成Model

使用Django生成Model方法如下:

一、将旧的数据库添加到您的项目

编辑数据库设置。你需要告诉Django你的数据库连接参数是什么,以及数据库的名称,要做到这一点需要编辑数据库设置,并在“default”连接下面的键赋值。我们首先要打开settings.py文件,在文件中找到“DATABASES”,然后开始赋值。下面的数字序号和下图中数字序号对应。

①使用的数据库后端,这里使用PostgreSQL数据库。

②使用的数据库名称。

③连接到数据库时使用的用户名。

④连接到数据库时使用的密码。

⑤连接到数据库时使用的主机,这里使用的是本地主机。

⑥连接到数据库时使用的端口。

二、自动生成Model(模型)

1、创建Model(模型)。Django附带一个名为inspectdb的实用程序,可以通过检查现有的数据库来创建Model(模型)。您可以通过运行以下命令来实现。

2、在指定的文件中创建Model(模型)。将其另存为指定的文件。您可以通过运行以下命令来实现。

3、具体例子。现在我们通过一个具体例子的代码,让大家能更好理解。下面的数字序号和下图中数字序号对应。

①在项目中新建一个名为“legacy”的文件夹。

②在“legacy”的文件夹中创建一个名叫“legacy”的应用(app)。

③在指定文件(apps/legacy/models.py)中自动生成Model。

Django模型(三)

知识要点:

表关系的实现

一对多表关系

在Mysql中一对多是通过外键实现的,在django模型中通过ForeignKeyfield类型实现。

一对一表关系

在Mysql中一对一是通过外键加唯一键实现的,在django模型中通过OneToOneField类型实现。

多对多表关系

在Mysql中多对多是通过中间表外键加联合唯一键实现的,在django模型中通过ManyToManyField类型实现。中间表模型会自动帮我们创建好。

例子:

关系表中数据的操作

自己创建的djangopackage怎么生成模型创建脚本

你可以自己写一个startproject命令

我写了一个flask的startproject:mana

大概的思路如下

你本地写一个项目原型(你可以加上manage.py,带Auth的Usermodel)

然后考虑动态的部分(生成项目可能会改变的部分,比如:项目名称),将动态的部分使用类似#{{xxx}}的注解格式标记

然后编写命令(推荐click),关键就是使用pythonos.walk遍历你的原型(需要注意使用绝对路径)复制到你生成的项目中,动态的部分读文件替换#{{xxx}}.

这样你就可以

$yourcommandstartprojectYourDjangoProject

$cdYourDjangoProject(你想要的项目原型:含manage.py,含基本的User模型)

$pythonmanage.pymakemigrations

$pythonmanage.pymigrate

cookiecutter是一个脚手架,如果它的功能你不满意可以自己写一个.

结语:以上就是首席CTO笔记为大家整理的关于django如何自定义模型顺序的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么有世界三大男高音,而没有人是世界三大最高男音? 各位,请教一个问题。给一个初次见面的朋友用日文怎么写信? 男友不好意思夸我,怎么办? 结婚不发朋友圈 2023年哈尔滨12月一般多少度-12月份去哈尔滨穿什么合适 《狱中联欢》教案 狱中联欢、赤壁之战、田忌赛马、一夜的工作、石灰吟按时间的先后顺序排... 狱中联欢是按照——顺序来记叙的?文中详写的是——略写的是—— 如何对待轻视你的人? 看透身边这七种人,提升自己格局和认知 django开发哪些东西? django有什么作用? 国内哪个网站是用DJANGO? django支持多少用户? 【手把手系列】Django如何快速配置Swagger UI(附demo) javascript参考文档? JS深浅拷贝? javascript获取元素(javascript中获取元素的方法有哪些) 北碚有哪些医院 重庆北碚区中医院和重庆第九人民医院哪个好? 英雄联盟我邀请好友登录游戏,怎么样就算他接受我的邀请登录的 英雄联盟手游怎么拒绝陌生人的邀请 怎么关闭组队邀请 初一第二学期开学第三周周记 康复医学常用的治疗方法有哪些? 纸箱加工厂是什么意思 纸箱包装厂哪家好 欠债被起诉可以到酒店开房吗 被法院起诉身份证还可以开宾馆吗 我是酒店前台,无意间导致酒店被勒令停业半个月多导致最终酒店亏损十余万... 树状图帮我画一下 django的数据库是什么(2023年最新整理) django实现的web项目有哪些(2023年最新整理) django开发的网站有哪些(2023年最新解答) 多孔介质的特点包括( ) 什么是多孔介质? 多孔介质几个重要概念 氯化锌物质毒性 维也纳酒店(江苏太仓南洋广场店)维也纳酒店(江苏太仓南洋广场店)_百度... 维也纳国际酒店 太仓港店怎么样 求推荐男歌手情歌,粤语国语都行,不需要太新的,非主流也算了。。_百度... pascal break作用 超市卖假冒伪劣商品怎样处罚? 股权抵押借款合同范本内容是什么? 股权抵押借款合同范本是怎样的? 借款抵押物合同范本怎么写? 一般什么罪判两年有期徒刑? 洱源梅子产地 洱源梅子质量技术要求 洱源梅子的发展劣势 如何对齐姓名、联系人等文本?