共计 1680 个字符,预计需要花费 5 分钟才能阅读完成。
一、创建对象
- 当创建对象时 DJango 没有操作数据库读写,当调用 save() 方法时才与数据库进行交互,将对象保存到数据库
__init__()
方法已经在 models.Model 类中进行了重写规定了特殊含义,所以在模型类中不能重写
二、增加方式
-
对象创建空对象后赋值
u = User() # 实例化 User 模型类 u.username = 'lucky' # 添加用户名 u.password = 123456 # 添加密码 u.sex = True # 添加性别 u.age = 18 # 添加年龄 u.info = 'lucky 是一个帅气的 boy' # 添加个人简介 u.save() # 进行保存
问题:代码冗余,不利于复用
-
传参创建对象
u = User(username="lucky", age=17, sex=True, info="lucky is a good man") u.save()
问题:关键字参数冗余,并且不提示有哪些属性
-
管理器类中定义创建方法
class MyAppManager(models.Manager): def get_queryset(self): return super().get_queryset().filter(isDelete=False) def create(self, name, age, sex, info): obj = self.model() # User() obj.name = name obj.age = age obj.sex = sex obj.info = info return obj class User(models.Model): # 自定义管理器对象, objects = MyAppManager() username = models.CharField(max_length=20) password = models.CharField(max_length=64) sex = models.BooleanField(default=True) age = models.IntegerField(default=20) info = models.CharField(max_length=100,default='info') icon = models.CharField(max_length=60,default='default.jpg') isDelete = models.BooleanField(default=False) createTime = models.DateTimeField(auto_now_add=True) class Meta: db_table = "users"
u = User.objects.create("lucky", 16, False, "lucky is a good Boy") u.save()
-
在模型类中定义一个类方法用于创建对象
class User(models.Model): username = models.CharField(max_length=20) password = models.CharField(max_length=64) sex = models.BooleanField(default=True) age = models.IntegerField(default=20) info = models.CharField(max_length=100,default='info') icon = models.CharField(max_length=60,default='default.jpg') isDelete = models.BooleanField(default=False) createTime = models.DateTimeField(auto_now_add=True) class Meta: db_table = "users" @classmethod def create(self, name, age, sex, info): return cls(name=name, age=age, sex=sex, info=info)
u = User.create("lucky", 18, False, "lucky is a bad man") u.save()
正文完
星哥玩云-微信公众号