我正在尝试编写一个简单的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] 删除。
我来说两句