gpt4 book ai didi

python - 对 Django 模型请求的数据进行简单操作

转载 作者:行者123 更新时间:2023-12-01 06:46:59 28 4
gpt4 key购买 nike

我正在尝试编写一个简单的 Web 应用程序,我可以在其中上传 csv 文件并返回每个文件的 header 。一切正常。 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"
}

我很难解释(或谷歌)我的问题到底是什么。我不明白执行此操作的代码实际上在哪里或如何(它是序列化器、 View 还是模型的一部分?)。

或者更简单地说,假设我有一个模型,它有一个 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 框架,you will need to manually add this field to your serializer .

回到 CSV 文件的示例,这意味着您可以向模型添加 headers_of_csv 属性,该属性将包含用于自省(introspection)文件并返回 header 的代码。

不过,根据您的用例,这里存在潜在的性能问题。如果您想在 ListView 上公开此属性(即 - GET/thing/ 而不是 GET/thing/{id}/),您最终可能会打开数千个文件的数量以适应单个请求(因为信息每次都是动态生成的)。这没有多大意义,因为只有 CSV 文件更改时信息才会更改。在这种情况下,您可以考虑添加 headers_of_csv 作为实际的数据库列,并且 populate it when a model gets saved .

关于python - 对 Django 模型请求的数据进行简单操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59181875/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com