from django.conf import settings from django.db import models from apps.common.models import SoftDeleteModel class Member(SoftDeleteModel): """前台会员(与后台 staff 分离)。""" user = models.OneToOneField( settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, blank=True, related_name="member_profile", verbose_name="登录账号", ) name = models.CharField(max_length=200, verbose_name="姓名") phone = models.CharField(max_length=32, blank=True, default="", verbose_name="手机号") organize = models.CharField(max_length=200, blank=True, default="", verbose_name="单位") is_vip = models.BooleanField(default=False, verbose_name="VIP") last_login_at = models.DateTimeField(null=True, blank=True, verbose_name="最后登录") is_disabled = models.BooleanField(default=False, verbose_name="禁用") class Meta: ordering = ["-id"] verbose_name = "前台用户" verbose_name_plural = verbose_name constraints = [ models.UniqueConstraint( fields=["phone"], condition=~models.Q(phone=""), name="accounts_member_phone_unique", ) ] def __str__(self): return self.name or self.phone or f"Member#{self.pk}"