`
喜欢蓝色的我
  • 浏览: 360505 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

django学习知识点汇总(model)

 
阅读更多

问题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;

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics