问题1:
数据库查询,是出现[<Publisher: Publisher object>, <Publisher: Publisher object>]
操作步骤:
1.python manage.py shell 进入django的shell编程中
2. from books.models import Publisher
>>> publisher_list = Publisher.objects.all() >>> publisher_list [<Publisher: Publisher object>, <Publisher: Publisher object>]
我们可以简单解决这个问题,只需要添加一个方法 __str__() 到 Publisher 对象。 __str__() 方法告诉Python要怎样把对象当作字符串来使用。 请看下面:
更改model.py文件
from django.db import models class Publisher(models.Model): name = models.CharField(maxlength=30) address = models.CharField(maxlength=50) city = models.CharField(maxlength=60) state_province = models.CharField(maxlength=30) country = models.CharField(maxlength=50) website = models.URLField() **def __str__(self):** **return self.name** class Author(models.Model): salutation = models.CharField(maxlength=10) first_name = models.CharField(maxlength=30) last_name = models.CharField(maxlength=40) email = models.EmailField() headshot = models.ImageField(upload_to='/tmp') **def __str__(self):** **return '%s %s' % (self.first_name, self.last_name)** class Book(models.Model): title = models.CharField(maxlength=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField() **def __str__(self):** **return self.title**
就象你看到的一样, __str__() 方法返回一个字符串。 __str__() 必须返回字符串, 如果是其他类型,Python将会抛出 TypeError 错误消息 "__str__ returned non-string" 出来。
为了让我们的修改生效,先退出Python Shell,然后再次运行 python manage.py shell 进入。 现在列出 Publisher 对象就很容易理解了:
>>> from books.models import Publisher >>> publisher_list = Publisher.objects.all() >>> publisher_list [<Publisher: Addison-Wesley>, <Publisher: O'Reilly>]
请确保你的每一个模型里都包含 __str__() 方法,这不只是为了交互时方便,也是因为 Django会在其他一些地方用 __str__()来显示对象。
最后, __str()__ 也是一个很好的例子来演示我们怎么添加 行为 到模型里。 Django的模型不只是为对象定义了数据库表的结构,还定义了对象的行为。 __str__() 就是一个例子来演示模型知道怎么显示它们自己。
问题二
用order_by() 想固定按照某个字段排序,可在模板中写上
常用方法:
>>> Publisher.objects.order_by("-name") [<Publisher: O'Reilly>, <Publisher: Apress Publishing>, <Publisher: Addison-Wesley>]
再model.py 中定义了默认排序字段
class Publisher(models.Model): name = models.CharField(maxlength=30) address = models.CharField(maxlength=50) city = models.CharField(maxlength=60) state_province = models.CharField(maxlength=30) country = models.CharField(maxlength=50) website = models.URLField() def __str__(self): return self.name **class Meta:** **ordering = ["name"]**
就可以直接写
In [3]: Publisher.objects.order_by()
Out[3]: [<Publisher: Addison-Wesley>, <Publisher: O'Reilly>, <Publisher: Apress>]
问题三
删除字段
从模型里删除一个字段可要比增加它简单多了。删除一个字段仅需要做如下操作:
从你的模型里删除这个字段,并重启Web服务器。
使用如下面所示的命令,从你的数据库中删掉该列:
ALTER TABLE books_book DROP COLUMN num_pages;
删除 Many-to-Many 字段
因为many-to-many字段同普通字段有些不同,它的删除过程也不一样:
删除掉你的模型里的 ManyToManyField ,并且重启Web服务器。
使用如下面所示的命令,删除掉你数据库里的many-to-many表:
DROP TABLE books_books_publishers;
删除模型
完全删除一个模型就像删除一个字段一样简单。删除模型仅需要做如下步骤:
将此模型从你的 models.py 文件里删除,并且重启Web服务器。
使用如下的命令,将此表从你的数据库中删除:
DROP TABLE books_book;
相关推荐
Django知识点 PPT形式,Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。 Django是一个开放源代码的Web应用框架,由Python写成。 Django遵守BSD版权,...
Django学习笔记.pdf
Django基础知识介绍,英文版,读这本书要有一定的英文水平
主要介绍了Python中django Web应用框架的学习做了总结并把心得体会写了一下,大家一起参考下吧。
Python django 学习路径 思维导图 根据思维导图可以更加清晰直观的看到自己的学习进度 ,了解自己需要加强学习的部分,此文档仍需要完善
django 学习资源总结,里面包括了个人的总结
django学习资料django学习资料
django-model-report, Django 报告与highcharts集成 Django 模型报告django-model-report是与highcharts集成的报告的Django 应用程序和库。 现在,由 @jelenak 维护。演示http://django-model-report.hero
主要介绍了django的基础使用,以及涉及部分开发知识点
django基础知识(一),内为django学习笔记整理,以供参考
django学习
本人学习django归纳的学习路线图,不仅仅只有学习路线,每个学习路线中包含我归纳的教程,可以理解像树状图一样的教程,一棵树中的每一个果子,每个果子有核和肉。都包含了
一起学习django,希望对你有帮助
django中文学习.pdf
2024-Django平台开发-Django知识点(四)
本文档为Django入门知识,其中详细的讲解了如何搭建第一个Django程序。
个人总结的Django学习笔记, 持续更新中。 目前只是总结了django的一部分学习逻辑。
django_rest_framework 序列化器知识点汇总思维导图, 帮助你更好的捋清楚学习思路, 导图工具: MindMaster
Django是一种高效、快速、易于学习和使用的Python框架,Django非常适合于网络应用的开发,该框架可以帮助开发者轻松地构建基于MVC模式的复杂Web应用程序。Django框架具有强大的功能和特性,让开发者在开发过程中...