from django.contrib.auth.models import AbstractUser from django.db import models from django.urls import reverse from django.utils.timezone import now from django.utils.translation import gettext_lazy as _ from djangoblog.utils import get_current_site # Create your models here. class BlogUser(AbstractUser): """ 博客用户模型,继承 Django 的 AbstractUser, 添加了博客系统需要的额外字段,如昵称、创建时间、修改时间和来源。 """ nickname = models.CharField( _('nick name'), # 字段在 admin 或表单中的显示名称(可翻译) max_length=100, # 昵称最大长度为 100 blank=True # 可以为空 ) creation_time = models.DateTimeField( _('creation time'), # 创建时间字段 default=now # 默认值为当前时间 ) last_modify_time = models.DateTimeField( _('last modify time'), # 最近修改时间 default=now ) source = models.CharField( _('create source'), # 用户来源字段,例如“注册、后台添加等” max_length=100, blank=True ) def get_absolute_url(self): """ 返回用户详情页的 URL,用于在模板或视图中直接获取用户个人主页链接。 这里使用 username 作为参数。 """ return reverse( 'blog:author_detail', kwargs={ 'author_name': self.username } ) def __str__(self): """ 返回对象的字符串表示,这里使用 email,方便在 admin 或调试时查看。 """ return self.email def get_full_url(self): """ 返回带域名的完整用户详情页 URL。 例如:https://example.com/blog/author/username """ site = get_current_site().domain # 获取当前站点域名 url = "https://{site}{path}".format( site=site, path=self.get_absolute_url() ) return url class Meta: ordering = ['-id'] # 默认按 ID 降序排列 verbose_name = _('user') # 在 admin 中显示的名称 verbose_name_plural = verbose_name # 复数形式 get_latest_by = 'id' # get_latest 方法默认按 ID 获取最新对象