具有相关实例更新的Django Model Save()方法

时间:2018-11-23 11:31:56

标签: python django django-models

我可能是Django的中型用户,我掌握了很多RTFM。

我的工作流程大致如下:

  1. 检索帐户(模型)对象。
  2. 帐户对象执行操作(更新字段等)
  3. 使用帐户作为外键创建相关的使用(模型)对象。
  4. account 对象更新为 usage 对象上自定义save()的一部分。
  5. (将在第2步中对帐户所做的所有更改保存起来)。

模型

import csv
from datetime import datetime

with open('yourfile.csv') as fin:
    seen_columns = set()
    invalid_columns = set()
    for row in csv.reader(fin):
        for colno, col in enumerate(row, 1):
            # We've seen it contains a non-date - don't try and parse it again
            if colno in invalid_columns:
                continue

            # Make a note we've seen column N
            seen_columns.add(colno)

            # Try and see if we can parse it to the desired date format
            try:
                datetime.strptime(col, '%m/%d/%y')
            # Nope - we couldn't... not a date - so don't both checking again
            except ValueError:
                invalid_columns.add(colno)

    # Columns containing dates are those we've seen that
    # didn't fail to parse as a date...
    valid_columns = seen_columns - invalid_columns

各种功能/方法中的代码

class Account(models.Model):
    ...
    credit_balance = models.IntegerField(...)
    ...

class Usage(models.Model):
    ...
    account = models.ForeignKey(Account, ...)
    credit_balance = models.IntegerField(...)
    ...

    def save( self, *args, **kwargs ):
        """Custom usage save to update account stats."""
        if self.account:
            self.account.credit_balance = self.credit_balance
            self.account.save()

我真正要努力解决的是是否需要做:

account = Account.objects.get(pk=pk)

[do something to account]

usage = Usage.objects.create(account = account,
                             tariff_short_name = account.tariff.short_name,
                             **customer_data['usage'])

此时,含义是什么?

当我将相关的 account 对象保存在用法中时,我对 account 所做的更改(例如在第2步中)似乎已保存。 em>对象自定义保存方法。

为什么? 使用对象如何“知道”实例化的 account 对象的当前状态是什么?

我期望随后必须保存 account 对象,可能使用save(update_fields = [])来防止将 usage 对象更新覆盖到帐户模型。

抱歉,这是如此深奥-我只是不了解Django的行为。我似乎可以在tfm中找到它,但由于不确定所要查找的内容,因此我的谷歌搜索无法正常工作。

0 个答案:

没有答案