django学习笔记
Choice参数(数据库设计字段常见)
针对某一个字段可能是可以完全列举的, 我们可以使用choice字段
例如: 性别, 成绩等级
gender_choices = (
(1, '男'),
(2, '女'),
(3, '其他'),
)
gender = models.IntegerField(choice=gender_choices)
score_choices = (
('A','优秀'),
('B','良好'),
('C','及格'),
('D','不合格'),
)
# 保证字段类型跟列举出来的元组第一个数据类型一致即可
score = models.CharField(choices=score_choices,null=True)
2. 获取字段对应的中文信息
user_obj = models.User.objects.filter(pk=1).first()
print(user_obj.gender) # 这里打印的是元组的第一个元素
# 只要是choices参数的字段, 如果你想要获取对应的信息, 固定写法 get_字段名_display()
print(user_obj.get_gender_display())
# 如果没有对应关系, 是什么就展示什么
###MTV与MVC模型 ```python M:models T:templates V: views # MVC: 其实django的本质也是MVC M: models V: views C: controller多对多三种创建方式
# 全自动: 利用ORM自动帮我们创建第三张表
class Book(models.Model):
anme = models.CharField(max_length=32)
authors = models.ManyTOManyField(to='Author')
class Author(models.Model):
name = models.CharField(max_length=32)
# 优点, 第三张表不需要你自己创建 ,还支持orm的各种操作
# 缺点:第三张表的扩展性很差 不支持额外添加字段
# 存手动
class Book(models.Model):
anme = models.CharField(max_length=32)
class Author(models.Model):
name = models.CharField(max_length=32)
class Book2Author(models.Model):
book_id = models.ForeginKey(to='Book')
author_id = models.ForeignKey(to='Author')
# 优点: 第三张表完全取决于自己进行的额外扩展
# 缺点: 需要写的代码较多, 并且不支持orm的简单操作,不推荐使用
# 半自动
class Book(models.Model):
name = models.CharField(max_length=32)
authors = models.ManyToManyField(to='Author',
through='Book2Author',
through_fields=('book','author')
)
class Author(models.Model):
name = models.CharField(max_length=32)
# books = models.ManyToManyField(to='Book',
# through='Book2Author',
# through_fields=('author','book')
# )
class Book2Author(models.Model):
book = models.ForeignKey(to='Book')
author = models.ForeignKey(to='Author')
"""
to='关联的表名'
through='自己创建的第三张表'
through_fields=(第三张表的字段)
through_fields字段先后顺序
当前表是谁, 就把对应的关联字段放在前面
可以使用orm 的正反向查询, 但是没法使用add,set,remove, clear
"""
### AJAX
```python
异步提交, 局部刷新
$('#btn').click(function () {
// 朝后端发送ajax请求
$.ajax({
// 1.指定朝哪个后端发送ajax请求
url:'', // 不写就是朝当前地址提交
// 2.请求方式
type:'post', // 不指定默认就是get 都是小写
// 3.数据
{#data:{'username':'jason','password':123},#}
data:{'i1':$('#d1').val(),'i2':$('#d2').val()},
// 4.回调函数:当后端给你返回结果的时候会自动触发 args接受后端的返回结果
success:function (args) {
{#alert(args) // 通过DOM操作动态渲染到第三个input里面#}
{#$('#d3').val(args)#}
console.log(typeof args)
}
})
})
# 后端使用JsonResponse返回数据, 回调函数会自动帮你反序列化
# 后端使用HttpResponse返回数据, 回调函数不会帮你反序列化
# 自己在前端利用JSON.parse()
# 后端, json.dumps()