使用Django模型请求的数据进行简单操作

简·比尔

我正在尝试编写一个简单的Web应用程序,在这里我可以上传CSV文件并从每个文件返回标头。一切正常。id(文件路径)保存在数据库中。

这是我得到的答复:

{
"id": 1,
"filefield": "http://127.0.0.1:8000/api/merged/1/uploads/header_body_test_zZr4Cea.csv"
}

我不了解的是,我在哪里或如何实际使用我从数据库请求的数据?我在想像的是不同的url路由,我可以在其中指定一个id,响应将是这样的:

{
"id": 1,
"filefield": "http://127.0.0.1:8000/api/merged/1/uploads/header_body_test_zZr4Cea.csv"
"headers_of_csv": "Date;Amount"
}

我很难解释(或Google)我的实际问题是什么。我不知道执行此操作的代码实际位于何处或如何运行(它是串行器,视图还是模型中的一部分?)。

或更简单地说,假设我有一个模型,该模型具有一个ID和一个3位数字,并返回以下内容:

{
"id": 1,
"number": 567
}

我如何或在哪里可以创建这样的响应:

{
"id": 1,
"number": 567
"first_digit_or_number": 5
}

任何帮助都将不胜感激,我只是不明白我应该寻找什么。

先生姓名

让我们从您的简单问题开始。您从示例中获得了模型:

class MyModel(models.Model):
    number = models.IntegerField()

然后,通过发送POST请求创建此模型的实例,这将导致以下对象:

{
    "id": 1,
    "number": 567
}

现在,您要返回有关此对象的一些其他信息,至少在这种情况下,这些信息未存储在数据库中,而是从有关该对象的其他信息派生而来。这是模型属性派上用场的地方。

class MyModel(models.Model):
    number = models.IntegerField()

    @property
    def first_digit_of_number(self):
        return int(str(self.number)[0])

请注意,如果您使用的是django rest框架,则需要将该字段手动添加到序列化程序中

回到CSV文件的示例,这意味着您可以headers_of_csv向模型添加一个属性,该属性将包含用于内省该文件并返回标头的代码。

但是,根据您的用例,这里可能存在性能问题。如果要在列表视图中显示此属性(即-GET /thing/而不是GET /thing/{id}/),最终可能会打开数千个文件来容纳单个请求(因为该信息每次都是动态生成的)。这没有多大意义,因为仅当CSV文件更改时信息才会更改。在这种情况下,您可以考虑添加headers_of_csv为实际的数据库列,并在保存模型时填充它

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章