class Topic(models.Model):
text = models.CharField(max_length=200)
date_added = models.DateTimeField(auto_now_add=True)
author = models.CharField(max_length=20)
def __str__(self): # 1
"""返回 models 的字符串的表示"""
return self.text
class Entry(models.Model):
class Meta: # 2
verbose_name_plural = "entriesssss"
def __str__(self):
"""返回 model 的字符串表示"""
return self.text[:50] + "..."
1、 注释#1处
是一个str()函数,其作用是。。。。。(代完成)
2、 注释#2处:
首先来看看 Meta元类的原文档:
Model metadata is “anything that’s not a field”, such as ordering options (ordering), database table name (db_table), or human-readable singular and plural names (verbose_name and verbose_name_plural). None are required, and adding class Meta to a model is completely optional.
翻译:
模型元数据是任何不是字段的东西,例如排序选项( ordering)、数据库表名(db_table)、或人类可读的单数和复数名称(verbose_name和verbose_name_plural)。没有一个是必需的,在模型中class Meta是完全可选的。
Meta下有很多options,这里选两个用到的举例说明:
(1) ordering
这个字段是告诉Django模型对象返回的记录结果集是按照哪个字段排序的。
这是一个字符串的元组或列表,来自于class Model中的字段
当字段名前面没有’-‘时,将默认使用升序排列。使用’?’将会随机排列
ordering=[‘date_added] # 按发布时间升序排列
ordering=[‘-date_added’] # 按发布时间按降序排列,-表示降序
ordering=[‘?date_added’] # 随机排序,?表示随机
ordering=[‘-date_added’,’author’] # 以date_added为降序,再以author升序排列
(2) verbose_name_plural
这个选项是指定模型的复数形式是什么,verbose_name_plural = “entriesssss",会再admin账户下才看得到差别。
如果不指定Django会自动在模型名称后加一个s,并且首字母自动大写’
比如上面的Topic 和 Entry,一个没有verbose_name_plural参数,一个有并且为verbose_name_plural= “entriesssss”,看结果: