Python 从Django模型请求数据的简单操作

Python 从Django模型请求数据的简单操作,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在尝试编写一个简单的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,

我正在尝试编写一个简单的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"
}
{
"id": 1,
"number": 567
"first_digit_or_number": 5
}
我很难解释(或谷歌)我的问题到底是什么。我不明白执行此操作的代码实际在哪里或如何执行(它是序列化程序的一部分,还是视图的一部分,还是在模型中?)

或者更简单地说,假设我有一个模型,它有一个id和一个3位数字,并返回:

{
"id": 1,
"number": 567
}
如何或在何处创建这样的响应:

{
"id": 1,
"filefield": "http://127.0.0.1:8000/api/merged/1/uploads/header_body_test_zZr4Cea.csv"
"headers_of_csv": "Date;Amount"
}
{
"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\u of_CSV
属性,该属性将包含内省文件并返回头的代码


但是,根据您的用例,这里有一个潜在的性能问题。如果您想在列表视图中公开此属性(即-
GET/thing/
而不是
GET/thing/{id}/
),您可能会打开数千个文件以适应单个请求(因为信息每次都是动态生成的)。这没有多大意义,因为只有当CSV文件更改时,信息才会更改。在这种情况下,您可以考虑将 CysCSV添加为实际的数据库列,并且

不完全确定您要做什么,但我认为您正在尝试创建一个Django DealItVIEW来显示特定的模型实例…像这样的?这正是我想做的,我刚刚有时间尝试@property解决方案,它工作得非常好。当我下班回家时,我将阅读/尝试其他内容,非常感谢!