三、django-admin中修改模型字段的值

1.Category与Blog是一对多关系:Category对象实例获取关联的Blog对象
category.blog_set
category.blog_set.count() #获取关联的Blog对象的数量

2.Tag与Blog是多对多关系:
tag.blog_set.count() #获取Tag关联的所有Blog对象的数量
tag_list = blog.tag.all()

class BlogAdmin(admin.ModelAdmin):
    list_display = ['title', 'click_nums', 'category', 'create_time', 'modify_time']

    def save_model(self, reqeust, obj, form, change):
        '''统计博客数目、博客种类中包含的博客数目、博客标签中包含的博客数'''
        #统计博客数目
        blog_nums = Blog.objects.count()
        count_nums = Counts.objects.get(id=1)
        count_nums.blog_nums = blog_nums
        #统计博客博客种类中包含的博客数目
        obj_category = obj.category
        obj_category.number = obj_category.blog_set.count()
        obj_category.save()
        #统计博客标签中包含的博客数
        obj_tag_list = obj.tag.all()
        for obj_tag in obj_tag_list:
            obj_tag.number = obj.tag.blog_set.count()
            obj_tag.save()

    def delete_model(self, reqeust, obj):
        '''统计删除博客后的博客总数、博客标签中的博客数、
        博客种类中的博客数
        '''
        #统计删除博客后的博客总数
        blog_nums = Blog.objects.count()
        count_nums = Counts.objects.get(id=1)
        count_nums.blog_nums = blog_nums - 1
        count_nums.save()
        #统计删除博客后的博客标签中的博客数
        obj_category = obj.category
        obj_category.number = obj_category.blog_set.count() - 1
        obj_category.save()
        #统计删除博客后博客种类中的博客数
        obj_tag_list = obj.tag.all()
        for obj_tag in obj_tag_list:
            obj_tag.number = obj_tag.blog_set.count() - 1
            obj_tag.save()
        obj.delete()
django get_object_or_404 是django shortcuts模块里面一个比较简便的方法,特别是用django get来操作
数据库的时候,可以帮 我们少写一些代码,加快开发速度。

get_object_or_404的介绍: 我们原来调用django 的get方法(model.object.get()),如果查询的对象不存在的话,
会抛出一个DoesNotExist的异常, 现在我们调用django get_object_or_404方法,它会默认的调用django 
的get方法, 如果查询的对象不存在的话,会抛出一个Http404的异常,我感觉这样对用户比较友好, 如果
用户查询某个产品不存在的话,我们就显示404的页面给用户,比直接显示异常好。

get_object_or_404一般需要3个参数: 
1. modelname:一个model,manage,或query对象。 
2. *args 
3. **kwargs 而后面的*args,**kwargs则是查询的时候用到的参数。

下面用个例子看来下:
from django.shortcuts import get_object_or_404 
product = get_object_or_404(Product, pk=1) 

Product是要查询的model,后面的pk=1是查询条件,你可以根据你需要查询的情况来写条件。 上面的例子
也可以写成下面这样的形式:

复制代码
from django.http import Http404

try:
    product = Product.objects.get(pk=1)
except MyModel.DoesNotExist:
    raise Http404
复制代码
看来用django get_object_or_404方法可以省下你很多操作,有兴趣可以看看django.shortcuts 模块包里面
的其他的方法, 会让你能够在提高编程的效率。

 

 

#####################

用model.object.get()方法查询对象,如果对象不存在的话,会抛出一个DoesNotExist的异常,这样将会使
模型层与视图层耦合在一起

Django最重要的一个设计目标就是保持松耦合。 用get_object_or_404可以使模型层和视图层低耦合。

一些可控的耦合将会在django.shortcuts 模块中介绍。

你可能感兴趣的:(Django)