Django -- 一对多建表增删改查

Posted agoni-7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django -- 一对多建表增删改查相关的知识,希望对你有一定的参考价值。

一对多表结构

ForeignKey -- 设置外键与另一张表关联

class Book(models.Model):
    title = models.CharField(max_length=32)
    pub = models.ForeignKey(Publisher, on_delete=models.CASCADE) # 外键 -- 关联表另一张表

 

查询

all_books = models.Book.objects.all() # 获取所有的数据
print(all_books)
for book in all_books:
    print(book)  # 得到一个数据对象
    print(book.pk)  # 数据对象的主键ID
    print(book.title)  # 数据对象的title字段的值
    print(book.pub, type(book.pub))  # 外键关联的对象
    print(book.pub_id, type(book.pub_id))  # 外键关联的对象的ID

 

新增

def book_add(request):
    if request.method == POST:  # 判断请求方法
        title = request.POST.get(title)  # 通过input框的name=‘title‘属性获取value值(输入内容)
        pub_id = request.POST.get(pub_id)  # 同上
        # models.Book.objects.create(title=title, pub=models.Publisher.objects.get(pk=pub_id))
        models.Book.objects.create(title=title, pub_id=pub_id)  # 同步到数据库,(数据库字段=获取的值)
        return redirect(/book_list/)  # 重定向,跳转页面

 

删除

def book_del(request):
    pk = request.GET.get(pk)  # 获取url中 pk对应的value值
    models.Book.objects.filter(pk=pk).delete()  # 比较Book表中的pk值与获取url的pk值,相同就删除
    return redirect(/book_list/)

 

编辑

def book_edit(request):
    pk = request.GET.get(pk)  # 获取发送GET请求对应的pk值
    book_obj = models.Book.objects.filter(pk=pk).first()  # 获取pk值对应数据对象
    if request.method == POST:
        title = request.POST.get(title)  # input框中name=‘title‘属性对应的value值
        pub_id = request.POST.get(pub_id)
?
        book_obj.title = title  # 修改book表数据对象的值
        book_obj.pub_id = pub_id  # 通过pub_id获取到option的value值,并修改book表中的值,(pub_id外键对应publisher表中的pk值对应的数据)
        book_obj.save()  # 提交数据
        return redirect(/book_list/)

 

以上是关于Django -- 一对多建表增删改查的主要内容,如果未能解决你的问题,请参考以下文章

MySQL代码建表增删改查(CRUD)

MySQL基本操作--库表增删改查

pg:常用字段类型建表增删改查索引

pg:常用字段类型建表增删改查索引

PHP : MySQLi面向过程操作数据库 连接建库建表增删改查关闭

django orm 单表增删改查