You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.7 KiB
50 lines
1.7 KiB
from django.conf import settings
|
|
from django.contrib.auth.models import AbstractUser
|
|
from itsdangerous import URLSafeTimedSerializer as Serializer
|
|
from db.base_model import BaseModel
|
|
from django.db import models
|
|
|
|
# AddressManager Class
|
|
class AddressManager(models.Manager):
|
|
"""地址模型管理类"""
|
|
def get_default_address(self, user):
|
|
"""获取用户的默认地址"""
|
|
try:
|
|
address = self.get(user=user, is_default=True)
|
|
except self.model.DoesNotExist:
|
|
address = None
|
|
return address
|
|
|
|
# User Model
|
|
class User(AbstractUser, BaseModel):
|
|
"""用户模型类"""
|
|
def generate_active_token(self):
|
|
"""生成用户签名字符串"""
|
|
serializer = Serializer(settings.SECRET_KEY, 3600)
|
|
info = {'confirm': self.id}
|
|
token = serializer.dumps(info)
|
|
return token.decode()
|
|
|
|
class Meta:
|
|
db_table = 'df_user'
|
|
verbose_name = '用户'
|
|
verbose_name_plural = verbose_name
|
|
|
|
# Address Model
|
|
class Address(BaseModel):
|
|
"""地址模型类"""
|
|
user = models.ForeignKey('User', on_delete=models.CASCADE, verbose_name='所属用户')
|
|
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 = AddressManager()
|
|
|
|
class Meta:
|
|
db_table = 'df_address'
|
|
verbose_name = '地址'
|
|
verbose_name_plural = verbose_name
|