python django二级分类表现

本文介绍了一个基于Django的应用中如何定义和管理类别模型,包括字段定义、自定义方法及模型保存逻辑等。通过该模型可以实现对类别及其层级结构的有效管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class Category(models.Model):
    title=models.CharField(max_length=100,verbose_name=_('title'))
    parent=models.ForeignKey("self",verbose_name=_('parent'))
    orderNum=models.IntegerField(default=1,verbose_name=_('order number'))
    addtime=models.DateTimeField(auto_now_add=True,editable=False,verbose_name=_('addtime'))
    updatetime=models.DateTimeField(auto_now=True,editable=False,verbose_name=_('updatetime'))
   order_label=models.CharField(max_length=100,editable=False,blank=True,null=True)
   order_label_len=models.IntegerField(default=1,editable=False,blank=True,null=True)
    def __unicode__(self):
        if self.order_label==None:
            return '%s' %(self.title)
        else:
            return '%s%s' %(len(self.order_label.split("_"))*'--',self.title)
    def len_order_label(self):
        return len(self.order_label)
    class Meta:
        verbose_name_plural=_('column')
        verbose_name=_('column')
        ordering = ['order_label','orderNum','-addtime']
        
    def category_image(self):
        if self.image is not None and self.image.name is not '':
            return u"<img src=%s width=50 />" %(settings.MEDIA_URL+self.image.name)
        else:
            return u'No image here'       
    category_image.short_description = _('category')
    category_image.allow_tags = True





    def save_model(self, request, obj, form, change):
        """
        Given a model instance save it to the database.
        """
        if change == True:
            category = Category.objects.extra(where=['id=%s'], params=[obj.id])[0]
            if len(form.changed_data) != 0:
                for item in form.changed_data:
                    if item == 'image':
                        delete_file(category.image.name)
        if obj.parent.order_label:
            obj.order_label=str(obj.parent.order_label)+"_"+str(obj.orderNum)
        else:
            obj.order_label=str(obj.orderNum)
            
        obj.order_label_len=len(obj.order_label)
        obj.save()    
        reorderCategory()

def reorderCategory():
    category_list = Category.objects.all()
    for item in category_list:
        if item.id != 1:
            if item.parent.order_label:
                item.order_label = str(item.parent.order_label) + "_" + str(item.orderNum)
            else:
                item.order_label = str(item.orderNum)
            item.save()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值