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'))

django-改写manage类-objects的更多相关文章

  1. Django视图基类

    Django视图基类 Django REST framwork 提供的视图的主要作用: 控制序列化器的执行(检验.保存.转换数据) 控制数据库查询的执行 一 .视图 REST framework 提供 ...

  2. django定义模型类-14

    目录 1. 定义 字段类型 约束类型 django的模型类定义在应用下的 models.py 文件中. 模型类继承自 django.db.models 包下的 Model 类. 新创建应用 book ...

  3. Django视图扩展类

    Django视图扩展类 扩展类必须配合GenericAPIView使用扩展类内部的方法,在调用序列化器时,都是使用get_serializer 需要自定义get.post等请求方法,内部实现调用扩展类 ...

  4. django的模型类管理器-----------数据库操作的封装

    模型实例方法 str():在将对象转换成字符串时会被调用. save():将模型对象保存到数据表中,ORM框架会转换成对应的insert或update语句. delete():将模型对象从数据表中删除 ...

  5. django rest-framework 3.类 实现restful

    上节提到过,REST框架分别提供了对函数和类的装饰器,之前已经都是通过函数来写视图函数的,现在来尝试使用class 类来实现视图函数 使用基于类编写API视图,允许重用常用的功能,减少代码重复. 一. ...

  6. django之ModelBase类及mezzanine的page link类

    class ModelBase(type): """ Metaclass for all models. """ def __new__(c ...

  7. django的queryset和objects对象

    1. queryset是查询集,就是传到服务器上的url里面的内容.Django会对查询返回的结果集QerySet进行缓存,这里是为了提高查询效率. 也就是说,在你创建一个QuerySet对象的时候, ...

  8. [py][mx]django自定义认证类-实现邮箱作为用户名登录

    创建自定义验证用户名密码类CustomBackend users/views.py from django.contrib.auth import authenticate, login from d ...

  9. Django框架视图类

    类视图 在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图.使用类视图可以使用类的一些特性,比如继承等. View django.views.generic.base.View是主 ...

随机推荐

  1. DS博客作业07--查找

    1.本周学习总结(0--2分) 1.思维导图 2.谈谈你对查找运算的认识及学习体会. 2.PTA实验作业(6分) 本周要求挑3道题目写设计思路.调试过程.设计思路用伪代码描述.题目选做要求: 原则上题 ...

  2. golang测试与性能调优

  3. 未能加载文件或程序集 Microsoft.ReportViewer.ProcessingObjectModel, Version=10.0.0.0

    写在前面 整理错误集.某一天在启动项目的时候,出现了未能加载文件或程序集 Microsoft.ReportViewer.ProcessingObjectModel, Version=10.0.0.0错 ...

  4. 已知IP地址算子网掩码

    子网掩码计算方法有两种: 方法一:利用子网数来计算: 1.首先,将子网数目从十进制数转化为二进制数: 2.接着,统计得到的二进制数的位数,设为N: 3.最后,先求出此IP地址对应的地址类别的子网掩码. ...

  5. 使用 audioqueue 播放PCM数据

    // // MainViewController.h // RawAudioDataPlayer // // Created by SamYou on 12-8-18. // Copyright (c ...

  6. 10分钟学会js处理json常用方法

    一.json定义 JSON ( JavaScript Object Notation) ,它是一串字符串 只不过元素会使用特定的符号标注. {} 双括号表示对象 [] 中括号表示数组 "&q ...

  7. oracle 如何预估将要创建的索引的大小

    一.1  oracle 如何预估将要创建的索引的大小 oracle 提供了2种可以预估将要创建的索引大小的办法: ①  利用包 Dbms_space.create_index_cost 直接得到 ②  ...

  8. 高阶函数概念以及map/filter/reduce

    什么样的函数叫高阶函数:map(func, *iterables) --> map object 条件:1.函数接受函数作为参数 2.函数的返回值中包含函数 num_l = [1,2,3,4,5 ...

  9. ondblclick和dblclick区别

    1.ondblclick是一个HTML DOM Event 对象,没有jquery也可以触发这个事件的,使用方法例如 1 <button ondblclick="xxx"&g ...

  10. Django-视图函数view

    目录 1.Django的视图函数view 1.1一个简单的视图 2.CBV和FBV 3.使用Mixin(了解) 4.给视图加装饰器 4.1使用装饰器装饰FBV 4.2使用装饰器装饰CBV 5.requ ...