• django-改写manage类-objects


    user/models.py中

    class AddressManage(models.Manager):
        '''地址模型管理类'''
        def get_default_addr(self, user):
            '''获取默认收货地址'''
            try:
                address = self.get(user=user, is_default=True)
            except self.model.DoesNotExist:
                # 不存在默认收货地址
                address = None
            return address
    
    
    class Address(BaseModel):
        '''地址模型类'''
        user = models.ForeignKey('User', verbose_name='所属账户', on_delete=models.CASCADE,)
        receiver = models.CharField(max_length=20, verbose_name='收件人')
        addr = models.CharField(max_length=256, verbose_name='收件地址')
        zip_code = models.CharField(max_length=6, null=True, verbose_name='邮政编码')
        phone = models.CharField(max_length=11, verbose_name='联系电话')
        is_default = models.BooleanField(default=False, verbose_name='是否默认')
        # 自定义一个模型管理器对象
        objects = AddressManage()
    
        class Meta:
            db_table = 'df_address'
            verbose_name = '地址'
            verbose_name_plural = verbose_name

    视图函数views.py中直接调用方法

    # 用户地址
    # /user/address
    from user.models import Address
    class AddressView(LoginRequiredMinxin, View):
        def get(self, request):
            '''显示用户信息页面'''
            # 获取地址信息
            user = request.user
            address = Address.objects.get_default_addr(user)
            print(address)
            return render(request, 'user_center_site.html', {'page':'address', 'address':address})
    
        def post(self, request):
            '''添加地址'''
            # 接收数据
            receiver = request.POST.get('receiver')
            zip_code = request.POST.get('zip_code')
            addr = request.POST.get('addr')
            phone = request.POST.get('phone')
            # 校验数据
            if not all([receiver, addr, phone]):
                return render(request, 'user_center_site.html', {'errmsg':'数据不完整'})
            if not re.match(r'^1[3|4|5|7|8][0-9]{9}$', phone):
                return render(request, 'user_center_site.html', {'errmsg':'手机格式不正确'})
            # 业务处理:地址添加
            # 如果用户已存在默认收货地址,添加的地址不作为默认收货地址,否则作为默认收货地址
            # 获取登录用户对应User对象
            user = request.user
            address = Address.objects.get_default_addr(user)
    
            if address:
                is_default = False
            else:
                is_default = True
    
            # 添加地址
            Address.objects.create(user=user,
                                   receiver=receiver,
                                   zip_code=zip_code,
                                   addr=addr,
                                   phone=phone,
                                   is_default=is_default)
            # 返回应答 刷新页面
            return redirect(reverse('user:address'))
  • 相关阅读:
    安装Elasticsearch,Logstash,Kibana(5.0.1-mac版)
    代理服务器
    浅谈微信三级分销系统的漏洞
    Highcharts图表.net版开源,支持webform 和 mvc3,完全开源
    (转)搞个这样的APP要多久?心酸啊。
    (转)nginx+iis实现负载均衡
    (转).NET技术大系概览 (迄今为止最全的.NET技术栈)
    (转)Asp.Net Mvc视图引擎Razor介绍
    (转)多种方法实现Loading(加载)动画效果
    (转)C# 正则表达式
  • 原文地址:https://www.cnblogs.com/yifengs/p/11614583.html
Copyright © 2020-2023  润新知