#gjl
from django.db import models
from django.utils.timezone import now


# Create your models here.

# 定义一个名为 OwnTrackLog 的数据库模型，用于存储由 OwnTracks 应用程序上传的位置日志数据。
# 该模型继承自 Django 的 models.Model 类，每个类属性对应数据库中的一列。
class OwnTrackLog(models.Model):
    # gjl (Tracker ID): 标识发送位置信息的设备或用户。
    # gjl 使用 CharField 存储字符串，最大长度为100个字符，不允许为空（null=False）。
    # gjl verbose_name 设置为 '用户'，在 Django 管理后台等界面中显示为“用户”。
    tid = models.CharField(max_length=100, null=False, verbose_name='用户')

    # gjl lat: 存储地理位置的纬度坐标。
    # gjl 使用 FloatField 存储浮点数，表示纬度值（例如：39.9042）。
    # gjl verbose_name 设置为 '纬度'，用于在管理后台中显示友好的字段名。
    lat = models.FloatField(verbose_name='纬度')

    # gjl lon: 存储地理位置的经度坐标。
    # gjl 使用 FloatField 存储浮点数，表示经度值（例如：116.4074）。
    # gjlverbose_name 设置为 '经度'，用于在管理后台中显示友好的字段名。
    lon = models.FloatField(verbose_name='经度')

    # gjl creation_time: 记录该位置信息被创建的时间。
    # gjl使用 DateTimeField 存储日期和时间。
    # gjl第一个参数 '创建时间' 是该字段的 verbose_name（可读名称）。
    # gjldefault=now 表示默认值为当前时间（注意：这里传入的是函数引用 now，不是 now()，以避免迁移时时间固定）。
    creation_time = models.DateTimeField('创建时间', default=now)

    # gjl __str__(self) 方法定义了该模型实例对象在转换为字符串时的行为。
    # gjl 在 Django 管理后台、shell 或其他需要显示对象的地方，会显示此方法的返回值。
    # gjl此处返回 self.tid，即该记录对应的用户/设备ID，便于识别。
    def __str__(self):
        return self.tid

    # Meta 类是 Django 模型的内部类，用于定义模型的元数据（metadata），不作为一个字段存在。
    class Meta:
        # ordering: 指定查询该模型时的默认排序方式。
        # ['creation_time'] 表示按 creation_time 字段升序排列（最早的数据在前）。
        # 若需降序，可写为 ['-creation_time']。
        ordering = ['creation_time']

        # verbose_name: 指定该模型在 Django 管理后台或其他用户界面中的可读单数名称。
        # 这里设置为 "OwnTrackLogs"，会在管理后台的菜单中显示为此名称。
        verbose_name = "OwnTrackLogs"

        # verbose_name_plural: 指定该模型的可读复数名称。
        # 通常 Django 会自动加 's'，但有时需要自定义。
        # 此处将其设置为与 verbose_name 相同，即单复数形式一致，都显示为 "OwnTrackLogs"。
        verbose_name_plural = verbose_name

        # get_latest_by: 指定用于获取最新记录的字段。
        # 当调用模型管理器的 latest() 方法时，Django 会使用此字段进行排序并返回最新的对象。
        # 例如：OwnTrackLog.objects.latest() 将返回 creation_time 最晚的记录。
        get_latest_by = 'creation_time'