Django 对数据库的增删改及自定义管理类

2019-04-24  本文已影响0人  上帝大人

对数据库的增删改

增加一条数据

class BookInfo(models.Model):
    btitle =models.CharField(max_length=20)
    bdate = models.DateField()
    bread =models.IntegerField(default=0) # 阅读量,默认为0
    bcomment = models.IntegerField(default=0)#评论量,默认为0

    isDelete = models.BooleanField(default=False)#逻辑删除

然后在views.py中定义一个cure函数视图处理函数,在里面定义一个对象,并为其属性赋值,然后调用对象的save()方法,完成对数据库的插入。

def cure(request):
    book =BookInfo()
    book.btitle='天龙八部'
    book.bdate='2019-04-04'
    #...
    book.save()
    return HttpResponse('执行结束!')

如果插入含有外键的数据的时候,外键属性的值必须是一个对象,一个与此表关联的外键属性的对象

def cure(request):
    person = Person()
    person.pname='郭靖'
    person.pcommnet='降龙十八掌'
    person.pgender=True

    b= BookInfo.objects.get(btitle='天龙八部')
    person.hbook=b
    person.save()
    return HttpResponse('执行结束')

改数据库中的数据

def cure(request):
    book =BookInfo.objects.get(btitle = '红楼梦')
    book.bdate='1999-09-09'
    #...
    book.save()
    return HttpResponse('执行结束!')

删除数据表中的数据

比该数据库中的数据还要简单,查询到对象,调用对象的delete()完成删除。




自定义管理类!

一般,类都放在models.py中,所以我们自定义图书管理类也放在其中。
然后重写里面的方法,或者自定义方法,这些方法是类似与(BookInfo.objects.方法)。

class BookManager(models.Manager):
        def all(self):
                return super().all().filter( isDelete=False )  #super()是调用父类中的方法。
#从这里我们可以看出来,我们删除的东西,有可能只是逻辑删除,你没查出来,但是它可能还存在于数据库中。
        def addBook(self, bookname, pub_date):
                book=self.model()  #比较的秀的写法。
#              book= BookInfo()   #与上面那句等价
                book.title=bookname
                book.date= pub_date
                book.save()
        def delete(self,bookname):
                pass
        def search(self,date):
                pass

然后在BookInfo中创建管理器的对象,否者,你不定义,他自动创建的是objects

#在BookInfo中
bookobjects= BookManager()  
此时,默认的objects不会生效


元数据

class BookInfo(models.Model):
        class Meta:
                db_table=' book '
        pname=models.CharFiled(max-length=20)
上一篇 下一篇

猜你喜欢

热点阅读