Python Django:如何在创建同一类的新实例时访问以前的模型类实例?

Python Django:如何在创建同一类的新实例时访问以前的模型类实例?,python,django,database,django-models,django-views,Python,Django,Database,Django Models,Django Views,我的django应用程序中有一个模型,如下所示: 型号.py class Profit(models.Model): client = models.ForeignKey(Client, null=True, on_delete=models.CASCADE) month = models.CharField(max_length=100) amount = models.IntegerField() total_profit = models.IntegerFi

我的django应用程序中有一个模型,如下所示:

型号.py

class Profit(models.Model):
    client = models.ForeignKey(Client, null=True, on_delete=models.CASCADE)
    month = models.CharField(max_length=100)
    amount = models.IntegerField()
    total_profit = models.IntegerField()

class ProfitListView(ListView):
    model = Profit
    template_name = 'client_management_system/profit_detail.html'
    context_object_name = 'profits'


    # pk=self.kwargs['pk'] is to get the client id/pk from URL
    def get_queryset(self):
        user = get_object_or_404(Client, pk=self.kwargs['pk'])
        return Profit.objects.filter(client=user)
现在,我想做的是,每当为这个类创建一个新的实例/对象时,用户都会将该月的
月份和
金额
,但我想它也会通过将过去添加的所有利润相加,计算用户到当前利润为止的总利润

比如说

如果用户正在添加4月份的利润,那么它会将以前添加的对象(3月、2月、1月等)的
金额
字段中的所有值添加到
利润总额
字段中。这样用户就可以看到他在每个新条目上获得了多少利润

我正在打印利润列表的My views.py如下所示:

视图.py

class Profit(models.Model):
    client = models.ForeignKey(Client, null=True, on_delete=models.CASCADE)
    month = models.CharField(max_length=100)
    amount = models.IntegerField()
    total_profit = models.IntegerField()

class ProfitListView(ListView):
    model = Profit
    template_name = 'client_management_system/profit_detail.html'
    context_object_name = 'profits'


    # pk=self.kwargs['pk'] is to get the client id/pk from URL
    def get_queryset(self):
        user = get_object_or_404(Client, pk=self.kwargs['pk'])
        return Profit.objects.filter(client=user)
Client
是my models.py中的另一个模型,
Profit
类通过ForeignKey连接到该模型


我也不知道如何在这个视图中使用窗口函数。

如注释中所述,通常不应该在数据库中存储可以从其他数据计算的内容。因为这会导致重复,然后很难更新数据。虽然如果您的数据可能不会更改,并且这是一些财务数据,但出于记录保存的目的,您可能会将其存储起来

首先,
month
,因为
CharField
不适合您的模式。首先,它们不容易订购,其次,最好使用
日期时间字段

class Profit(models.Model):
    month = models.CharField(max_length=100) # Remove this
    made_on = models.DateTimeField() # A `DateTimeField` is better suited
    amount = models.IntegerField()
    total_profit = models.IntegerField()

将其存储在模型中没有多大意义。你可以在必要时计算。谢谢。如果我没有将其保存在模型中,请您指导一下,然后在哪里以及如何计算总利润?在my views.py中,我使用Django ListView打印所有月份及其利润,我还想在每个条目前打印总利润。@RazaJaved您可以使用它来执行此操作。@AbdulAzizBarkat谢谢。因为我是Django的新手,读过关于使用窗口函数的书,但不能完全理解它。你能详细说明一下我如何在上面提到的特殊情况下使用它们吗?非常感谢你的回答,它似乎可以解决我的问题。我的问题更新了一点,你能看一下吗。我已经在问题中添加了我的views.py文件,我不知道如何在我的视图中包含您建议的修改。