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/')

 

posted on 2019-08-27 21:19  ShenQiang  阅读(332)  评论(0编辑  收藏  举报