【问题标题】:Django Tastypie create API with complex calculation on database fieldsDjango Tastypie 创建对数据库字段进行复杂计算的 API
【发布时间】:2015-03-17 11:53:09
【问题描述】:

我是 Djnago/Tastypie 的新手,在创建具有 复杂计算 的 API 时遇到了麻烦。模型如下:

class Customer(models.Model):
'''Customer details.'''
    name = models.CharField(max_length=200, null=True, blank=True)
    latitude = models.DecimalField(default=0, decimal_places=10,
                                  max_digits=15, blank=True, null=True)
    longitude = models.DecimalField(default=0, decimal_places=10,
                                   max_digits=15, blank=True, null=True)

现在的任务是创建一个API,它将纬度、经度、半径作为请求参数,我们必须计算所有经纬度范围内的客户到请求点的给定半径。

到目前为止,我只有使用 Tastypie 创建简单 API 的经验。任何人都可以向我建议可能的资源类或任何可能有助于创建此 API 的 Django/Tastypie 教程 吗?
谢谢

【问题讨论】:

标签: python django tastypie


【解决方案1】:

标准模型资源中的两种可能方法

class MyResource(ModelResource):

  class Meta:
    queryset = MyModel.objects.all()
    ...

完成创建对象的所有工作并将其添加到您返回的包中:

def obj_create(self, bundle, request=None, **kwargs):


    ref = bundle.data['ref']
    value = complex calculation here

    bundle.obj = MyModel.objects.create(ref=ref, value = value)


    return  bundle

使用父类创建对象并将其放入bundle中然后修改值:

def obj_create(self, bundle, request=None, **kwargs):


    bundle = super(MyResource, self).obj_create(
        bundle, request, user=request.user
    )
    bundle.obj.value = complex calculation here
    bundle.obj.save()


    return  bundle

【讨论】:

  • 但是这个 API 并不假设创建新数据,它只是一个 GET API,它将所有附近的 lat,long(存在于数据库中)返回到请求的 lat,long。跨度>
  • 如果您调用 POST 则不会
  • 这不会在数据库中创建新的 MyResource 数据,我只需要从数据库中获取详细信息而不是创建。
猜你喜欢
  • 2015-04-28
  • 2012-02-11
  • 1970-01-01
  • 2015-11-14
  • 2011-10-26
  • 1970-01-01
  • 2020-08-19
  • 2011-07-06
  • 2011-04-26
相关资源
最近更新 更多