0

我有一个简单的 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 中是否有一些设置可以确定数据库上次更新的时间?

4

2 回答 2

0

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

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

于 2013-08-02T09:41:47.317 回答
0

你可以 像文档TimeStampedModel中描述的那样django_extensions

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

from django_extensions.db.models import TimeStampedModel

class Item(TimeStampedModel):
    ...
    ...

您可以使用modified字段来确定Item 上次更新的时间。

于 2017-12-05T11:59:35.350 回答