我最近开始使用Django REST Framework(以及Django和Python - 我是一个RTOS /嵌入式系统人员!)来实现RESTful Web API.还没有任何问题,但谷歌无法解决这个问题,但是现在这个问题让我感到难过了几个小时.
我有一个嵌入式系统,可以监听与一系列设备相关的事件 - 类似于电话拨打电话,这是我为了简洁而在此讨论的内容.电话有一个号码和一大堆与之相关的呼叫(它已经制作).呼叫具有关联的电话(拨打电话的电话)和创建时间.发生调用时,应将其POST到API.我有一个嵌入式系统,可以监听呼叫及其始发电话号码,并将其提交给API.由于嵌入式系统知道电话号码,我希望它提交:{"srcPhone":12345678}而不是{"srcPhone":"http://host/phones/5"}.这避免了我的嵌入式系统需要知道每个电话的主键(或每次想要提交呼叫时按号码获取GET电话).
Google和Django文档建议我可以用自然键实现这一点.我的尝试如下:
models.py
from django.db import models
from datetime import datetime
from pytz import timezone
import pytz
from django.contrib.auth.models import User
# Create your models here.
def zuluTimeNow():
return datetime.now(pytz.utc)
class PhoneManager(models.Manager):
def get_by_natural_key(self, number):
return self.get(number=number)
class Phone(models.Model):
objects = PhoneManager()
number = models.IntegerField(unique=True)
#def natural_key(self):
# return self.number
class Meta:
ordering = ('number',)
class Call(models.Model):
created = models.DateTimeField(default=zuluTimeNow, blank=True)
srcPhone = models.ForeignKey('Phone', related_name='calls')
class …Run Code Online (Sandbox Code Playgroud)