個(gè)人主頁(yè)的分類(lèi)操作-創(chuàng)新互聯(lián)

主頁(yè)分類(lèi)操作

需求

個(gè)人主頁(yè)的分類(lèi)操作
如圖,對(duì)文章進(jìn)行歸類(lèi)后,在首頁(yè)的左面會(huì)出現(xiàn)一個(gè)分類(lèi)列表,以及么個(gè)分類(lèi)對(duì)應(yīng)的文章數(shù)目
modles.py中對(duì)應(yīng)的數(shù)據(jù)庫(kù)關(guān)系如下

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),順城企業(yè)網(wǎng)站建設(shè),順城品牌網(wǎng)站建設(shè),網(wǎng)站定制,順城網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,順城網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
class Article(models.Model):
    nid = models.BigAutoField(primary_key=True)
    title = models.CharField(verbose_name='文章標(biāo)題',max_length=128)
    summary = models.CharField(verbose_name='文章簡(jiǎn)介',max_length=255)
    read_count = models.IntegerField(default=0)
    comment_count = models.IntegerField(default=0)
    up_count= models.IntegerField(default=0)
    down_count = models.IntegerField(default=0)
    create_time = models.DateTimeField(verbose_name='創(chuàng)建時(shí)間',auto_now_add=True)

    blog=models.ForeignKey(verbose_name='所屬博客',to='Blog',to_field='nid',on_delete=models.CASCADE,)
    category = models.ForeignKey(verbose_name='所屬分類(lèi)',to='Category',to_field='nid',null=True,on_delete=models.CASCADE,)
    type_choices = [
        (1, "Python"),
        (2, "Linux"),
        (3, "OpenStack"),
        (4, "GoLang"),
    ]
    article_type_id = models.IntegerField(choices=type_choices, default=None)

    tags = models.ManyToManyField(
        to="Tag",
        through='Article2Tag',
        through_fields=('article', 'tag'),
    )

class Blog(models.Model):
    """
    博客信息
    """
    nid = models.BigAutoField(primary_key=True)
    title = models.CharField(verbose_name='個(gè)人博客標(biāo)題',max_length=64)
    site = models.CharField(verbose_name='個(gè)人博客前綴',max_length=32,unique=True)
    theme = models.CharField(verbose_name='個(gè)人博客主題',max_length=32)
    user = models.OneToOneField(to='UserInfo',to_field='nid',on_delete=models.CASCADE,)
class Category(models.Model):
    """
    博主個(gè)人文章分類(lèi)表
    """
    nid = models.AutoField(primary_key=True)
    title = models.CharField(verbose_name='分類(lèi)標(biāo)題',max_length=32)
    blog = models.ForeignKey(verbose_name='所屬博客',to='Blog',to_field='nid',on_delete=models.CASCADE,)

當(dāng)用戶輸入了博客后綴后,通過(guò)后綴列出的,當(dāng)前用戶的分類(lèi)信息

def home(request,site):
    blog = models.Blog.objects.filter(site=site).first()
    if not blog:
        return redirect('/')

    #當(dāng)前博客的所有文章
    models.Article.objects.filter(blog=blog)#這里可以傳入blog對(duì)象,也可以通過(guò)blog__id=blog.id的方式來(lái)過(guò)濾

    #當(dāng)前所有博客的分類(lèi)
    # cate_list = models.Category.objects.filter(blog=blog)
    # for item in cate_list:
    #     c = item.article_set.all().count()#通過(guò)反向查找每個(gè)類(lèi)對(duì)應(yīng)的所有文章的個(gè)數(shù)
    #     print(item,c)
    #但是上面的這個(gè)方法不好,他對(duì)數(shù)據(jù)庫(kù)的操作比較多,我們可以使用下面的一次性查出來(lái),通過(guò)一條來(lái)操作

    #下面的一條分類(lèi)語(yǔ)法,
    # from django.db.models import Count
    # category_list = models.Article.objects.filter(blog=blog).values('category_id','category__title').annotate(c=Count('nid'))
    # for title,conut in category_list:
    #     print(title,count)
    #

標(biāo)簽分類(lèi)

class Tag(models.Model):
    nid = models.AutoField(primary_key=True)
    title = models.CharField(verbose_name='標(biāo)簽名稱(chēng)',max_length=32)
    blog = models.ForeignKey(verbose_name='所屬博客',to='Blog',to_field='nid',on_delete=models.CASCADE,)

class Article(models.Model):
    nid = models.BigAutoField(primary_key=True)
    title = models.CharField(verbose_name='文章標(biāo)題',max_length=128)
    summary = models.CharField(verbose_name='文章簡(jiǎn)介',max_length=255)
    read_count = models.IntegerField(default=0)
    comment_count = models.IntegerField(default=0)
    up_count= models.IntegerField(default=0)
    down_count = models.IntegerField(default=0)
    create_time = models.DateTimeField(verbose_name='創(chuàng)建時(shí)間',auto_now_add=True)

    blog=models.ForeignKey(verbose_name='所屬博客',to='Blog',to_field='nid',on_delete=models.CASCADE,)
    category = models.ForeignKey(verbose_name='所屬分類(lèi)',to='Category',to_field='nid',null=True,on_delete=models.CASCADE,)
    type_choices = [
        (1, "Python"),
        (2, "Linux"),
        (3, "OpenStack"),
        (4, "GoLang"),
    ]
    article_type_id = models.IntegerField(choices=type_choices, default=None)

    tags = models.ManyToManyField(
        to="Tag",
        through='Article2Tag',
        through_fields=('article', 'tag'),
    )

class Article2Tag(models.Model):
    article = models.ForeignKey(verbose_name='文章', to="Article", to_field='nid',on_delete=models.CASCADE,)
    tag = models.ForeignKey(verbose_name='標(biāo)簽', to="Tag", to_field='nid',on_delete=models.CASCADE,)

    class Meta:
        unique_together = [
            ('article', 'tag'),
        ]

views處理結(jié)果

#tag標(biāo)簽分類(lèi)
    tag_list = models.Tag.objects.filter(blog=blog)
    for item in tag_list:
        c= item.article_set.all().count()
        print(item,c)
    ##上面的這種方法還是讀取數(shù)據(jù)庫(kù)次數(shù)多
    #方法一
    from django.db.models import Count
    models.Article.objects.filter(blog=blog).values('blog_id','tags__title').annotate(c=Count('nid'))
    #方法二
    ##通過(guò)manytomany來(lái)關(guān)聯(lián)
    # models.Article2Tag.objects.values('article_id','tag_id','article__title','tag__title')#通過(guò)一張表就關(guān)聯(lián)了三張表

    #方法三:有第三張表的前的情況
    models.Article2Tag.objects.filter(tag__blog=blog).values('tag_id','tag__title').annotate(c=Count('id'))#這個(gè)是獲取某個(gè)博客關(guān)聯(lián)的文章id和tagid的關(guān)系
    #article_id     tag_id
    #   1           1
    #   1           2
    #   2           12

    ##方法四:如果沒(méi)有第三張表,只是many2many自動(dòng)生成的表,通過(guò)下面的方法就可以連表
    models.Article.objects.filter(blog=blog).values('nid','title','tags','tags__title').annotate(c=Count('nid'))#這里加了一個(gè)tags就把前2個(gè)表
    #聯(lián)系到了一起,簡(jiǎn)歷一個(gè)關(guān)系表

方法四,需要把tags里面的through去掉,把手動(dòng)創(chuàng)建的第三張表去掉。然后來(lái)操作

時(shí)間分類(lèi)

個(gè)人主頁(yè)的分類(lèi)操作
發(fā)現(xiàn)原生sql很好來(lái)寫(xiě),但是django要怎么做?
個(gè)人主頁(yè)的分類(lèi)操作

%這個(gè)字符在python中格式字符串的時(shí)候,是不能保留的,如要要保留需要%%兩個(gè)。專(zhuān)業(yè)就可以得到100%這樣的,所以對(duì)于上面的年月,我們可以“%%Y-%%m”這樣在python格式化完后,數(shù)據(jù)庫(kù)之間就可以%Y這樣了

sqlite的寫(xiě)法是這樣個(gè)人主頁(yè)的分類(lèi)操作

創(chuàng)新互聯(lián)www.cdcxhl.cn,專(zhuān)業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買(mǎi)多久送多久。

網(wǎng)站標(biāo)題:個(gè)人主頁(yè)的分類(lèi)操作-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://m.kartarina.com/article24/dcpece.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開(kāi)發(fā)網(wǎng)站策劃自適應(yīng)網(wǎng)站企業(yè)網(wǎng)站制作網(wǎng)站排名外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
主站蜘蛛池模板: 国产精品亚韩精品无码a在线| 亚洲AV无码一区东京热久久 | 波多野42部无码喷潮在线 | 亚洲高清无码综合性爱视频| 亚洲精品无码久久久久sm| 日韩精品久久无码中文字幕| 少妇特殊按摩高潮惨叫无码| 亚洲av永久无码精品天堂久久| 国产aⅴ无码专区亚洲av| 无码任你躁久久久久久| 激情无码亚洲一区二区三区| 日韩精品无码人成视频手机| 亚洲AV无码专区国产乱码不卡 | 中文字幕人妻无码专区| 国产丰满乱子伦无码专| 亚洲AV永久无码精品放毛片| 亚洲中文久久精品无码| 午夜无码视频一区二区三区| 国产午夜无码片在线观看影院 | 亚洲中文无码线在线观看| 亚洲毛片av日韩av无码| 久久亚洲精品无码网站| 无码中文字幕av免费放dvd| 无码伊人66久久大杳蕉网站谷歌| 精品无码综合一区二区三区| 亚洲va成无码人在线观看| 久久久久久久人妻无码中文字幕爆 | 无码人妻少妇色欲AV一区二区| 亚洲国产av无码精品| 免费一区二区无码视频在线播放| 久久青青草原亚洲av无码app| 亚洲精品高清无码视频| 国产精品无码久久久久久| 日韩精品无码一区二区三区AV | 国产AV无码专区亚洲A∨毛片| 久久亚洲国产成人精品无码区| 中文字幕无码久久人妻| 东京热av人妻无码专区| 中文字幕无码毛片免费看| 国产成人无码一区二区在线播放| 本免费AV无码专区一区|