【问题标题】:Django Rest Framework global timestampDjango Rest Framework 全局时间戳
【发布时间】:2013-07-31 07:36:10
【问题描述】:

我有一个简单的 Django 模型:

class Item(models.Model):
    category = models.ForeignKey(Category)
    system = models.ForeignKey(System)
    company = models.ForeignKey(Company)
    catalog_number = models.CharField(max_length=55)
    name = models.CharField(max_length=255)
    description = models.CharField(max_length=755)
    price_usd = models.DecimalField(max_digits=22, decimal_places=2)
    price_cad = models.DecimalField(max_digits=22, decimal_places=2)
    price_eur = models.DecimalField(max_digits=22, decimal_places=2)
    price_gbp = models.DecimalField(max_digits=22, decimal_places=2)
    notes = models.TextField()

    def __unicode__(self):
         return self.name

我正在使用 Django Rest Framework 来公开一个简单的 API 端点:

from .models import Item
from rest_framework import serializers
from rest_framework import permissions


class ItemSerializer(serializers.HyperlinkedModelSerializer):
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,)

    category = serializers.RelatedField(source='category')
    system = serializers.RelatedField(source='system')
    company = serializers.RelatedField(source='company')

    class Meta:
        model = Item
        fields = (
            'catalog_number',
            'price_usd',
            'price_cad',
            'price_eur',
            'price_gbp',
        )

我的问题是,我想在 json 转储中包含一个时间戳,这将允许消费者应用程序确定自上次访问以来数据是否已更新。基本上是数据库上次更新时间的全局时间戳。

这应该是序列化程序中的一个查询集,它从Item 模型中找到最新的时间戳(尚未在模型中声明)?或者在 Django/Rest Framework 中是否有一些设置可以确定数据库上次更新的时间?

【问题讨论】:

  • 整个表、数据库的全局时间戳,还是每个单独行上次更新时间的时间戳?
  • 对于整个数据库。

标签: django django-rest-framework


【解决方案1】:

如果您使用auto_now 选项将DateTimeField 添加到您的模型中,您可以按该选项(降序)排序并限制到第一个结果以查找最新更新的时间。

一个 RetrieveAPIView 覆盖 get_object 以返回最后更新的 Item 以及仅公开 DateTimeField 的序列化程序应该为您提供所需的一切。

【讨论】:

    【解决方案2】:

    你可以TimeStampedModel django_extensionsdocs中所述

    TimeStampedModel - 提供自我管理的抽象基类模型 创建和修改字段。

    from django_extensions.db.models import TimeStampedModel
    
    class Item(TimeStampedModel):
        ...
        ...
    

    您可以使用modified 字段来确定Item 最后更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多