本文以mysql举例:
- 当数据库中新建一张表时, 此时找到对应的app下在其model中新建对应的model
注意:model的类名是不包含app名
例如: 我们的app叫book,此时对应的数据库表应该为book_content,那么类名应该只为content
from django.db import models
class Content(models.Model):
name= models.CharField('名称', max_length=255)
此时因为该model处于apps/book,django的orm会自动检索数据库对应的表名为book_content
这里一般会遇到一种错误情况:
"type object 'Content' has no attribute 'objects'"
这个错误的原因是因为对应的model模型类没有继承django的models类
解决方法:Content(models.Model)
类后面继承下即可
2.记录,查看model执行对应的原生sql语句
以上文model为例:
obj = Content.objects.filter(name='test')
print(obj.query)
这里需要注意下, 不能有后面的all()或first()
3.指定model查询的表名
class Student(models.Model):
username = models.CharField('姓名', max_length=30, blank=True, default='')
age = models.IntegerField('年龄')
class_name = models.CharField('班级名', max_length=100, blank=True, default='')
class Meta:
db_table = 'school_student' # 指定表名, 这样model查询会查指定的表名, 不再根据类名转换成app名_类名形成表名查询
4.django model
查询结果,动态根据字段值更新
class MyModel(models.Model):
field = models.CharField(max_length=255)
my_objects = MyModel.objects.filter(field='name').all()
new_field = "field"
for obj in my_objects:
setattr(obj, new_field, "123") # 使用 setattr() 函数动态设置字段值
obj.save()
使用了 setattr()
函数来动态地设置字段值。setattr()
函数的第一个参数是对象,第二个参数是字段名,第三个参数是新的值
setattr()
是 Python 中的一个内置函数,用于设置一个对象的属性值。它接受三个参数:对象、属性名称(字符串)和要设置的新值。
使用 setattr()
函数的好处在于它能够动态地设置属性,也就是说可以在运行时根据需要更改属性值,而不需要直接在对象中硬编码属性。这对于需要动态创建或修改属性的情况非常有用,使得代码更加灵活和可维护。
除了 setattr()
,Python 中还有一个类似的内置函数 getattr()
,用于获取对象的属性值。