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()
posted @ 2022-05-19 17:44  努力搬砖的zh  阅读(28)  评论(0)    收藏  举报